Ouest-France Scraper avatar

Ouest-France Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Ouest-France Scraper

Ouest-France Scraper

Scrape news articles from ouest-france.fr — title, lead, full body, author, dates, categories, photos, paywall status, and reading time. Accepts search URLs, article URLs, or free-text queries. Mobile JSON API, no proxy needed. JSON or CSV out.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share

Scrape news articles from ouest-france.fr — France's largest regional newspaper — and export them as structured JSON. Paste a search URL, a direct article URL, or a free-text query, and get titles, leads, full body text, authors, dates, categories, photos, and paywall status for every article. No headless browser, no proxy, no anti-bot to fight: the actor talks to Ouest-France's own mobile JSON API directly.

How it works

How Ouest-France Scraper works

✨ Why use this scraper?

  • Mobile JSON API, not a headless browser. The ouest-france.fr website sits behind Akamai bot protection (returns 403 to plain HTTP). The Android app's API has no such wall — the actor fetches a short-lived Algolia key, searches the articles index, and pulls full content in three clean JSON calls. Faster, cheaper, and more reliable than rendering pages.
  • Search or direct URLs. Run a free-text query ("Rennes", "immigration", "Nantes"), paste a recherche URL, or drop in individual article URLs. All three work and can be mixed in one run.
  • Full article body, not just cards. Toggle fetchFullDetails to pull the complete article text (assembled from the content API's structured body blocks), byline, reading time, and all photos — or leave it off for fast card-only harvests.
  • Paywall-aware. Each row carries a paywall flag and articleType. Paywalled articles (CONTENU_PAYANT) return their lead only; free articles return the full body. No pretending paywalled content is free.
  • One row per article, deduped. No padding rows. If the same article shows up in two search queries, it appears once.
  • No proxy required. The mobile API returns 200 with a plain User-Agent. Run direct and save the proxy budget.

🎯 Use cases

AudienceWhat they do with it
News monitorsTrack coverage of a topic, region, or event across Ouest-France's archive (1.4M+ articles searchable)
Media analystsBuild datasets of headlines, leads, and publication dates for trend analysis
Data journalistsHarvest regional news (Bretagne, Rennes, Nantes) for investigation or archive
NLP / LLM pipelinesFeed structured article text (title, lead, body, categories) into models for summarization or classification
Content archivistsSnapshot articles with full body, author, and photo metadata before they change

📥 Supported inputs

Input typeExampleWhat happens
Search URLhttps://www.ouest-france.fr/recherche/#!r/requete=Rennes&onglet=actualitesQuery extracted from the hash fragment, run against the articles index
Article URLhttps://www.ouest-france.fr/bretagne/rennes-35000/...-48996954-bdb4-11f1-81a4-4fea3020cab7Resolved to full content via the by-url endpoint
Free-text querysearchQueries: ["Rennes", "immigration"]Each query paginated through the Algolia articles index

Not supported: Ouest-France e-paper editions (feuilleteur), real estate listings (ouest-france.immo), funeral notices (avis-de-deces), and content behind a subscriber login.

🔄 How it works

  1. The actor fetches a short-lived Algolia secured key from the search-engine configuration endpoint.
  2. For each search query, it paginates the articles Algolia index (50 hits per page), collecting card metadata.
  3. Direct article URLs are resolved via the v2/entities/by-url endpoint to full content.
  4. If fetchFullDetails is on, each card is enriched with a v1/contents/{id} call for the full body, byline, photos, and paywall status.
  5. Results are deduped by article ID and pushed to the dataset, one row per article.

⚙️ Input parameters

FieldTypeDefaultDescription
startUrlsarray["https://www.ouest-france.fr/recherche/#!r/requete=Rennes&onglet=actualites"]Ouest-France search URLs and/or direct article URLs. Auto-classified.
searchQueriesarray[]Free-text queries to run against the articles index. Alternative to search URLs.
fetchFullDetailsbooleanfalseOpen each article for the full body, byline, photos, and paywall status.
maxItemsinteger100Hard cap on articles. Free-plan users are capped at 5.
maxConcurrencyinteger10Parallel article-detail fetches (only when fetchFullDetails is on).
proxyobject{ "useApifyProxy": false }The mobile API has no anti-bot, so a proxy is usually unnecessary.

📊 Output overview

Each dataset row is one Ouest-France article. Card-only runs (the default) return title, lead, url, date, categories, source, paywall flag, type, and photo counts. With fetchFullDetails on, each row also carries the full body text (plain + HTML), author, all publication dates, reading time, main tag, geo zones, and photo URLs.

📦 Output sample

{
"type": "article",
"articleId": "47c8fb5f-f25b-48b5-9b0f-04c657749bae",
"title": "Fortes tensions à Rennes et interpellations… revivez la matinée de blocage des lycées en Ille-et-Vilaine",
"url": "https://www.ouest-france.fr/societe/manifestation/direct-la-mobilisation-lyceenne-se-poursuit-ce-vendredi-a-rennes-47c8fb5f-f25b-48b5-9b0f-04c657749bae",
"lead": "Après les barrages, affrontements et dégradations de la veille, la mobilisation lycéenne se poursuit, ce vendredi 2 octobre 2026...",
"body": "Après les barrages, affrontements et dégradations de la veille, la mobilisation lycéenne se poursuit...",
"bodyHtml": "Après les barrages, affrontements et dégradations de la veille...",
"author": "Anthony Chaud, Ludivine Doméon, avec les rédactions Ouest-France",
"datePublished": "2026-10-02T05:40:42.000Z",
"firstPublicationDate": "2026-10-02T05:40:42Z",
"lastPublicationDate": "2026-10-02T11:39:49Z",
"lastUpdatedDate": "2026-10-02T13:23:47Z",
"categories": ["École collège lycée", "Manifestation", "Société", "Éducation"],
"source": "of",
"paywall": false,
"articleType": "GENERAL",
"isLive": true,
"photos": [{ "url": "https://media.ouest-france.fr/v1/pictures/...", "credit": null, "caption": null }],
"nbPhotos": 1,
"nbVideos": 0,
"readingTimeMinutes": 2,
"mainTag": "Manifestation",
"zonesGeo": ["Fougères", "Bretagne", "Rennes", "Saint-Malo", "Vitré", "Ille-et-Vilaine", "Régions"],
"fetchedFullDetails": true
}

🗂 Key output fields

FieldDescription
articleIdOuest-France article UUID (the Algolia objectID)
titleArticle headline
urlFull ouest-france.fr article URL
leadArticle lead paragraph (chapeau)
bodyFull article text, HTML stripped (only with fetchFullDetails)
bodyHtmlFull article body as HTML (only with fetchFullDetails)
authorByline / signature (only with fetchFullDetails)
datePublishedPublication date (ISO 8601)
firstPublicationDateFirst publication timestamp (only with fetchFullDetails)
lastPublicationDateLast publication timestamp (only with fetchFullDetails)
lastUpdatedDateLast update timestamp (only with fetchFullDetails)
categoriesTopic categories (e.g. Société, Éducation)
sourceContent source (usually of for Ouest-France)
paywalltrue if the article is behind a paywall (CONTENU_PAYANT)
articleTypeArticle type (GENERAL, LOCAL, CONTENU_PAYANT, live, etc.)
isLivetrue for live-blog articles
photosArray of photo objects with url, credit, caption
nbPhotos / nbVideosMedia counts
readingTimeMinutesEstimated reading time (only with fetchFullDetails)
mainTagPrimary tag (only with fetchFullDetails)
zonesGeoGeographic zones the article covers
fetchedFullDetailsWhether full content was fetched for this row

❓ FAQ

Why does the actor use the mobile API instead of scraping the website? The ouest-france.fr website is behind Akamai bot protection and returns 403 to non-browser HTTP clients. The Android app's JSON API has no such protection and returns the same data in a cleaner, structured format. This makes the actor faster, cheaper, and more reliable than a headless-browser approach.

Why are some article bodies short? Articles marked CONTENU_PAYANT (paywall: true) are behind Ouest-France's subscriber paywall. The API returns only the lead paragraph for these, not the full body. Free articles return the complete text. The paywall and articleType fields tell you which is which.

Do I need a proxy? No. The mobile JSON API returns 200 with a plain User-Agent. A proxy is only useful if you need to mask your IP for volume reasons, not for access.

How many articles can I scrape? The Algolia articles index holds over 1.4 million articles. maxItems caps each run. Free-plan users are capped at 5 articles per run.

Can I search for articles by date or region? The free-text query supports whatever Algolia search syntax Ouest-France exposes. Geographic filtering comes through the zonesGeo field on each result. For date filtering, sort by datePublished in post-processing.

💬 Support

Found a bug or want a feature? Open an issue on the Apify Console and we'll take a look.

🛠 Additional services

Need a custom integration, a specific filter, or a larger volume? Reach out via the Apify Console — we build tailored scraping pipelines on request.

🔎 Explore more scrapers

Looking for other news or directory scrapers? Check the full portfolio on Apify.


⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Ouest-France, SIPA Ouest-France, or any of their subsidiaries or affiliates. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available article data via Ouest-France's mobile API — no authenticated endpoints, subscriber-only content, or content behind a login. Paywalled articles return only their publicly visible lead paragraph. Users are responsible for ensuring their use complies with Ouest-France's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organisation.


SEO Keywords

ouest-france scraper, scrape ouest-france, ouest-france api, apify ouest-france, ouest-france news scraper, french news scraper, ouest-france article extractor, ouest-france search scraper, regional press scraper, bretagne news scraper, rennes news scraper, nantes news scraper, ouest-france algolia, ouest-france json api, news article archive scraper, french regional news data, ouest-france headlines scraper, ouest-france content scraper, ouest-france data extraction, ouest-france crawler