Sncf Connect avatar

Sncf Connect

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Sncf Connect

Sncf Connect

Scrapper for sncf connect

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

KOSMIX

KOSMIX

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share

SNCF Connect Journeys Scraper

Que fait le SNCF Connect Journeys Scraper ?

Le SNCF Connect Journeys Scraper recherche sur SNCF Connect les trajets en train entre deux villes ou gares et extrait pour chaque offre des données structurées : horaires de départ et d'arrivée, durée du trajet, nombre de correspondances, transporteur (OUIGO, TGV INOUI, TER, Intercités…) et prix — y compris avec ou sans carte de réduction.

Il est développé comme un Apify Actor : vous disposez donc d'un accès API, de la planification (scheduling), du monitoring et des intégrations (Zapier, Make, Google Sheets, Slack…) prêts à l'emploi, sans avoir à maintenir votre propre infrastructure de scraping.

Donnez-lui un from, un to, une date et une heure optionnelle, et il renvoie tous les trajets correspondants en JSON propre. Essayez-le directement depuis l'onglet Input d'Apify Console ou appelez-le via l'Apify API.

Pourquoi utiliser ce scraper ?

  • Surveillance des prix & horaires — suivez l'évolution des tarifs sur vos trajets habituels (ex. Paris → Modane, Marseille → Paris) et soyez alerté quand le prix baisse.
  • Automatisation de la planification de voyage — injectez horaires, durées et prix dans votre propre application, bot ou dashboard.
  • Analyse de l'offre ferroviaire — comparez les offres par jour, heure et transporteur (OUIGO, TGV INOUI, Intercités…), avec ou sans carte de réduction.
  • Fiable à grande échelle — exécution dans le cloud, sans machine à maintenir, avec des milliers de recherches planifiées.

Comment utiliser l'Actor sur Apify

  1. Ouvrez la page de l'Actor dans Apify Console et cliquez sur Try it (Essayer).
  2. Dans l'onglet Input, remplissez la gare de départ (from), la gare d'arrivée (to) et la date de voyage (date).
  3. Adaptez si besoin l'heure de départ (time), les voyageurs (passengers) et le nombre maximum de résultats (maxResults).
  4. Cliquez sur Run et attendez quelques secondes que la recherche se termine.
  5. Ouvrez l'onglet Dataset pour consulter ou télécharger les trajets en JSON, HTML, CSV ou Excel.

Vous pouvez aussi lancer une recherche par API en une seule requête :

curl "https://api.apify.com/v2/acts/~your-actor/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"from": "Paris",
"to": "Modane",
"date": "2026-08-09",
"time": "08:00",
"passengers": [
{
"age": 19,
"typology": "YOUNG",
"discountCards": ["YOUNG_PASS"],
"hasDisability": false,
"hasWheelchair": false,
"withoutSeatAssignment": false,
"business": "IS_NOT_BUSINESS"
}
],
"maxResults": 20
}'

Input — Explication des données d'entrée

Tous les champs sont décrits dans l'onglet Input d'Apify Console. Voici le détail de chaque paramètre.

Champs principaux

ChampTypeDescriptionDéfaut
fromstringVille ou gare de départ, ex. Paris, Marseille
tostringVille ou gare d'arrivée, ex. Modane, Lyon
datestringDate de voyage au format YYYY-MM-DD
timestringHeure de départ souhaitée au format HH:MM08:00
passengersarrayListe des voyageurs (voir détail ci-dessous)1 adulte
maxResultsintegerNombre maximum de trajets retournés (0 = illimité)20
proxyConfigurationobjectConfiguration du proxy Apify (voir section dédiée)Résidentiel FR

Remarque : from, to et date sont obligatoires. Les autres champs ont des valeurs par défaut et peuvent être omis.

Le tableau passengers (voyageurs)

Chaque voyageur est un objet avec les champs suivants :

ChampTypeDescriptionValeurs possiblesDéfaut
ageintegerÂge du voyageur (0-120)0 → 12030
typologystringCatégorie de voyageur utilisée par SNCFADULT, YOUNG, CHILD, SENIOR, INFANTADULT
discountCardsarrayCartes de réduction à appliquer (voir section dédiée)YOUNG_PASS, TGV_MAX, LIBERTE_PASS_FE, IDTGVMAX2[]
hasDisabilitybooleanLe voyageur est en situation de handicaptrue / falsefalse
hasWheelchairbooleanLe voyageur utilise un fauteuil roulanttrue / falsefalse
withoutSeatAssignmentbooleanVoyager sans réservation de placetrue / falsefalse
businessstringVoyage professionnel ou nonIS_BUSINESS / IS_NOT_BUSINESSIS_NOT_BUSINESS

Signification des typology (catégories d'âge SNCF) :

ValeurCatégorieTranche d'âge
INFANTBébé0 - 3 ans
CHILDEnfant4 - 11 ans
YOUNGJeune12 - 26 ans
ADULTAdulte18 - 59 ans
SENIORSenior60 ans et +

Astuce : associez toujours une carte de réduction à la typologie cohérente (ex. YOUNG_PASS avec typology: "YOUNG") pour obtenir des prix réalistes.

Les différentes cartes de réduction (discountCards)

Le champ discountCards accepte les codes internes utilisés par l'API SNCF Connect. Chaque code correspond à une carte commerciale SNCF réelle :

Code (discountCards)Carte réelleÀ qui ?Bénéfice principal
YOUNG_PASSCarte Avantage JeuneJeunes de 12 à 27 ansJusqu'à -30 % sur les TGV INOUI et Intercités, avec prix plafonnés
TGV_MAXTGV MaxAbonnés (formule mensuelle)Voyages illimités en 2nde classe sur une large sélection de TGV INOUI, OUIGO et Intercités
LIBERTE_PASS_FECarte LibertéVoyageurs fréquents / professionnelsTarifs réduits (~ -34 % en 2nde classe, -28 % en 1ère classe) sans condition de date ni de quota
IDTGVMAX2TGVmax 2 (IdTGV Max)Jeunes abonnésVoyages illimités en 2nde classe sur certaines lignes (offre historique de TGVmax)

Pour chaque carte sélectionnée, l'Actor calcule le prix réduit correspondant, disponible dans la sortie via le champ priceWithDiscountCardAmount. Si plusieurs voyageurs avec des cartes différentes sont fournis, chaque profil est transmis tel quel à l'API SNCF Connect.

Configuration du proxy (proxyConfiguration)

Pour éviter le blocage par les protections anti-bots de SNCF Connect, l'Actor utilise par défaut le proxy résidentiel français d'Apify. Vous pouvez configurer ce comportement via le champ proxyConfiguration :

ChampTypeDescriptionDéfaut
useApifyProxybooleanActiver le proxy Apifytrue
apifyProxyGroupsarrayGroupes de proxy (ex. ["RESIDENTIAL"])["RESIDENTIAL"]
apifyProxyCountrystringCode pays pour le proxy (ex. "FR")"FR"

Exemple avec proxy actif (par défaut) :

{
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "FR"
}
}

Exemple sans proxy (usage local uniquement) :

{
"proxyConfiguration": {
"useApifyProxy": false
}
}

⚠️ Attention : désactiver le proxy (useApifyProxy: false) peut entraîner un blocage par les protections anti-bots de SNCF Connect, surtout lors d'exécutions répétées depuis la même IP. Cette option est recommandée uniquement pour les tests locaux ou si vous utilisez votre propre solution proxy.

Output — Données de sortie

Chaque trajet est stocké comme un élément du dataset. Les données extraites sont plus riches que de simples horaires : l'Actor conserve la timeline complète du voyage (globalTimeline) avec ses étapes d'embarquement, de train et de correspondance, les services à bord, le détail des offres tarifaires (1ère / 2nde classe) et l'état de réservation.

Exemple réel (trajet Paris → Modane avec 2 correspondances et prix) :

{
"journeyId": "e9391411-f6b2-430f-bb63-e3156377f5e2, 5c84fc6a-a6b0-469e-9d44-71a75474fd8f, 8f684b88-b8d5-497a-a678-b2fbdb6b7688",
"from": "Paris - Gare De Lyon - Hall 1 & 2",
"to": "Modane",
"origin": {
"id": "CITY_FR_6455259",
"label": "Paris",
"city": "Paris",
"codes": [{ "type": "RESARAIL", "value": "FRPAR" }]
},
"destination": {
"id": "RESARAIL_STA_8774200",
"label": "Modane",
"codes": [
{ "type": "RESARAIL", "value": "FRAGR" },
{ "type": "UIC7", "value": "8774200" },
{ "type": "UIC8", "value": "87742007" }
]
},
"departure": "2026-08-09T15:14:00+02:00",
"arrival": "2026-08-09T20:56:00+02:00",
"departureTime": "15:14",
"arrivalTime": "20:56",
"durationLabel": "5h42",
"transfers": 2,
"transporter": "2 correspondances",
"priceAmount": 94,
"priceCurrency": "EUR",
"priceLabel": "94,70 €",
"priceWithDiscountCardAmount": null,
"firstClassPriceAmount": 116,
"secondClassPriceAmount": 94,
"status": { "isBookable": true },
"globalTimeline": {
"steps": [
{
"onBoarding": {
"onBoardingLabel": "Accueil embarquement jusqu'à 2 min avant le départ",
"onBoardingTimeLabel": "15:12",
"onBoardingTimeImpactedByDisruptionLabel": ""
}
},
{
"train": {
"departure": {
"stationCode": "",
"stationLabel": "Paris - Gare De Lyon - Hall 1 & 2",
"isStationLinkDisplayed": false,
"timeLabel": "15:14"
},
"arrival": {
"stationCode": "",
"stationLabel": "Grenoble",
"isStationLinkDisplayed": false,
"timeLabel": "18:13"
},
"duration": {
"label": "2h59",
"labelImpactedByDisruption": ""
},
"transporter": {
"modeIcon": { "iconGroup": "Transports", "iconName": "train" },
"logo": "tgv_inoui",
"number": "n° 6919",
"referenceLabel": "n° 6919",
"description": "TGV INOUI",
"semanticDescription": "TGV INOUI"
},
"onBoardServices": [
{ "code": "WIFI", "label": "Wifi à bord", "icon": { "iconGroup": "Services", "iconName": "wifi" } },
{ "code": "VOITURE_BAR", "label": "Voiture bar", "icon": { "iconGroup": "Services", "iconName": "bar" } },
{ "code": "NURSERIE", "label": "Espace nurserie", "icon": { "iconGroup": "Services", "iconName": "nursery" } },
{ "code": "HANDICAPE", "label": "Accessible voyageurs handicapés", "icon": { "iconGroup": "Services", "iconName": "accessibility" } }
],
"seatAssignments": [],
"stops": [],
"tripIv": {
"disruptions": { "messages": [] },
"vehicleDetails": {
"screenTitle": "",
"request": {
"number": "6919",
"date": "2026-08-09",
"origin": "RESARAIL_STA_8768600",
"destination": "RESARAIL_STA_8774700"
}
},
"upcomingTripSeatsWithCoachLabels": []
},
"states": [],
"segmentIcons": []
}
},
{
"connection": {
"correspondanceTimeLabel": "18 min",
"correspondanceTimeImpactedByDisruption": "",
"correspondanceRoutingSuggestion": {
"icon": { "iconGroup": "Mobility", "iconName": "journey" },
"title": "Correspondance",
"subTitle": "Voir les itinéraires pour changer de gare."
}
}
},
{
"train": {
"departure": { "stationCode": "", "stationLabel": "Grenoble", "timeLabel": "18:31" },
"arrival": { "stationCode": "", "stationLabel": "Chambery - Challes-Les-Eaux", "timeLabel": "19:18" },
"duration": { "label": "47 min" },
"transporter": {
"logo": "ter",
"number": "n° 17584",
"operatedBy": "Opéré par SNCF VOYAGEURS 1187",
"referenceLabel": "n° 17584",
"description": "Train TER"
},
"onBoardServices": [{ "code": "VELO_PAYANT", "label": "Espace vélo payant", "icon": { "iconGroup": "Services", "iconName": "bike" } }],
"seatAssignments": [],
"stops": [],
"tripIv": {
"disruptions": { "messages": [] },
"vehicleDetails": {
"screenTitle": "",
"request": {
"number": "17584",
"date": "2026-08-09",
"origin": "RESARAIL_STA_8774700",
"destination": "RESARAIL_STA_8774100"
}
},
"upcomingTripSeatsWithCoachLabels": []
},
"states": [],
"segmentIcons": []
}
}
]
},
"secondComfortClassOffers": {
"offers": [],
"bestPriceLabelPrefix": "dès"
},
"legs": [
{
"line": "TGV INOUI",
"trainNumber": "6919",
"from": "Paris - Gare De Lyon - Hall 1 & 2",
"to": "Grenoble",
"departure": "2026-08-09T15:14:00+02:00",
"arrival": "2026-08-09T18:13:00+02:00",
"departureTime": "15:14",
"arrivalTime": "18:13",
"durationLabel": "2h59"
},
{
"line": "Train TER",
"trainNumber": "17584",
"from": "Grenoble",
"to": "Chambery - Challes-Les-Eaux",
"departure": "2026-08-09T18:31:00+02:00",
"arrival": "2026-08-09T19:18:00+02:00",
"departureTime": "18:31",
"arrivalTime": "19:18",
"durationLabel": "47 min"
}
]
}

Trajet complet / non réservable : quand un train affiche complet, status devient un objet détaillé (ex. { "isBookable": false, "label": "Complet", "title": "Complet", "description": "Toutes les places ont déjà été vendues…", "severity": "ALERT" }) et les prix (priceAmount, priceLabel, etc.) sont null.

Vous pouvez télécharger le dataset dans divers formats : JSON, HTML, CSV ou Excel.

Tableau des données de sortie

ChampTypeDescription
journeyIdstringID(s) du trajet ; plusieurs UUID séparés par des virgules si le trajet a plusieurs tronçons
from / tostringGare de départ / d'arrivée
origin / destinationobjectLieu recherché (id, label, city, codes)
departure / arrivalstringDate-heure ISO 8601 de départ / arrivée
departureTime / arrivalTimestringHeures au format HH:MM, ex. 06:46
durationLabelstringDurée lisible, ex. 4h00, 5h42
transfersintegerNombre de correspondances
transporterstringex. Direct TGV INOUI, 2 correspondances
priceAmountnumberPrix le plus bas arrondi, ex. 94
priceCurrencystringCode devise, ex. EUR
priceLabelstringPrix formaté (format français), ex. 94,70 €
priceWithDiscountCardAmountnumberPrix avec carte de réduction (peut être null)
firstClassPriceAmountnumberPrix 1ère classe (peut être null)
secondClassPriceAmountnumberPrix 2nde classe (peut être null)
statusobjectÉtat de réservation : { isBookable: true } ou détail complet (label, description, severity)
globalTimelineobjectTimeline complète : étapes onBoarding, train et connection (voir ci-dessous)
firstComfortClassOffersobjectBloc d'offres 1ère classe (offers, bestPriceLabel, bestPriceLabelPrefix)
secondComfortClassOffersobjectBloc d'offres 2nde classe (offers, bestPriceLabel, bestPriceLabelPrefix)
legsarrayTronçons de train simplifiés : line, trainNumber, from, to, horaires, durée

Détail de la timeline (globalTimeline.steps)

Chaque étape de la timeline est l'un des trois types d'objet suivant :

Type d'étapeChamps principaux
onBoardingonBoardingLabel, onBoardingTimeLabel, onBoardingTimeImpactedByDisruptionLabel
traindeparture / arrival (gare + heure), duration, transporter (logo, n°, description, opérateur), onBoardServices (WIFI, voiture bar…), seatAssignments, stops, tripIv (perturbations, détails du véhicule)
connectioncorrespondanceTimeLabel, correspondanceTimeImpactedByDisruption, correspondanceRoutingSuggestion

Tarification / Estimation du coût

Combien coûte le scraping de SNCF Connect ? Une recherche de trajet est une exécution de navigateur légère qui se termine généralement en moins d'une minute, pour un coût bien inférieur à 1 compute unit par exécution. Avec l'offre gratuite d'Apify, votre quota mensuel de compute units et de stockage couvre des centaines de recherches. Pour un suivi régulier des prix, planifiez l'Actor à l'heure ou par jour : le coût par exécution reste minuscule et prévisible.

Conseils / Options avancées

  • Limitez les résultats avec maxResults pour accélérer les exécutions si vous n'avez besoin que des premiers départs.
  • Cherchez tôt — SNCF Connect affiche généralement les meilleurs tarifs pour les dates lointaines ; les horaires se rafraîchissent en cours de journée.
  • Testez les cartes — comparez le prix avec et sans carte de réduction (priceWithDiscountCardAmount vs priceAmount) pour identifier le meilleur profil d'achat.
  • Scalez raisonnablement — SNCF Connect est une plateforme de réservation en direct : gardez maxResults bas et évitez un grand nombre de recherches parallèles dans un court laps de temps.
  • Intégrez — connectez le dataset de sortie à Google Sheets ou Slack via les intégrations Apify pour des alertes de prix automatiques.

FAQ, avertissements et support

Est-ce légal ? L'Actor ne lit que des informations publiquement visibles sur SNCF Connect. Merci de consulter les Conditions Générales de Vente et le robots.txt de SNCF Connect avant toute utilisation commerciale des données, et de toujours respecter les limites de débit. Cet Actor est un projet indépendant, non affilié à la SNCF et non approuvé par elle.

Limites connues : SNCF Connect est une application JavaScript lourde avec protections anti-bot — les résultats peuvent changer si la plateforme met à jour son frontend. Certains prix (ex. avec carte de réduction) peuvent être null lorsqu'ils ne sont pas proposés pour un trajet donné. Les cartes de réduction ne sont prises en compte que si elles sont compatibles avec la typologie et l'âge du voyageur.

Retours : vous avez trouvé un bug ou souhaitez une fonctionnalité personnalisée ? Ouvrez une issue dans l'onglet Issues de ce dépôt, ou contactez-nous pour une solution sur mesure.