easyJet Scraper avatar

easyJet Scraper

Pricing

from $3.99 / 1,000 results

Go to Apify Store
easyJet Scraper

easyJet Scraper

Scrape public easyJet flight-search and low-fare route responses for one-way and round-trip itineraries when exact-date offers are exposed, with truthful diagnostics for month-level-only pages.

Pricing

from $3.99 / 1,000 results

Rating

0.0

(0)

Developer

Coding Frontned

Coding Frontned

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

5 days ago

Last modified

Categories

Share

What does easyJet Scraper do?

This Actor reads public easyJet flight-search pages and extracts normalized flight-offer records when the public response exposes exact-date itinerary objects. Structured searches use airport codes, travel dates, trip type, and passenger counts to resolve the official public cheap-flights route. Fully formed public easyJet URLs are also supported.

The Actor does not log in, enter payment details, call private booking endpoints, solve CAPTCHAs, bypass access controls, or convert a month-level minimum into a dated flight.

Current public-source boundary

The source boundary is HTTPS easyjet.com, including the public cheap-flights route. The current route page can render a low-fare finder with month-level prices such as September 2026 £31.99 and no exact-date flight objects. In that case the Actor emits a MONTHLY_FARE_ONLY diagnostic. A direct HTTP access challenge is emitted as SOURCE_BLOCKED. These are useful run outcomes, not successful exact-date flight extraction.

Input

Use one or more structured searches or public easyJet URLs. The Actor requires at least one valid search or URL.

FieldType/defaultBehavior
searchesarrayObjects with origin, destination, and departureDate. Optional returnDate, tripType, and passenger counts are source-request context.
startUrlsarrayFully formed HTTPS easyJet URLs. Invalid or duplicate entries are ignored; use a structured search when the URL is not valid.
maxItemsinteger, default 100, range 1–1000Global maximum for emitted flight and diagnostic rows.
requestTimeoutSecsinteger, default 30, range 5–120Per-request timeout.
maxRetriesinteger, default 1, range 0–2Finite retries for transient HTTP or transport failures.
retryDelayMsinteger, default 500, range 0–10000Bounded retry backoff in milliseconds.
requestDelayMsinteger, default 0, range 0–10000Respectful delay between ordered public requests.
proxyConfigurationobject, optionalOne authorized standard Apify Proxy route for public requests; use is reported in OUTPUT.
fixtureJsonstring, optionalBounded offline JSON used for deterministic QA; no public request is made when present.

For structured searches, normalized offers are retained only when their source-backed departureDate matches the requested departureDate. Passenger counts are carried into records when a source exposes or the request supplies them; they do not create availability that the source did not provide.

Output

Each dataset item is either a flight record or a diagnostic record.

Normal flight fields contain only public business/source data: sourceUrl, canonicalUrl, sourceDomain, origin, destination, departureDate, optional returnDate, tripType, airline, optional flight number and times, durationMinutes, stops, price, currency, fareType, cabinClass, availability, passengerCount, bookingUrl, observedAt, and scrapedAt. Runtime identifiers, status flags, redirect/transport details, and extraction instrumentation are omitted from normal rows.

Diagnostic fields include recordType, dataAvailable=false, recordId, diagnosticCode, message, sourceUrl, canonicalUrl, finalUrl, sourceDomain, transport, extractionMethod, the requested route context when available, and scrapedAt.

The OUTPUT key-value record contains recordsCount, recordsStored, offerCount, diagnosticCount, observedDiagnosticCount, failedRequests, blockedCount, pagesFetched, pagesProcessed, dataAvailable, duplicate and drop counters, and completion time. Counts describe rows actually emitted to the dataset; suppressed diagnostic count is zero because diagnostics are not silently discarded.

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Example structured input

{
"searches": [
{
"origin": "LGW",
"destination": "AMS",
"departureDate": "2026-10-01",
"adults": 1,
"tripType": "oneWay"
}
],
"maxItems": 100
}

Example normal record

{
"origin": "LGW",
"destination": "AMS",
"departureDate": "2026-10-01",
"airline": "easyJet",
"flightNumber": "U21234",
"price": 49.99,
"currency": "GBP",
"sourceUrl": "https://www.easyjet.com/en/cheap-flights/LGW/AMS",
"canonicalUrl": "https://www.easyjet.com/en/cheap-flights/LGW/AMS"
}

Tips, cost, and limitations

Each public URL is fetched directly or through one supplied standard Apify Proxy route with bounded retries, an 8 MiB response-body limit, a three-hop official-host redirect limit, and a per-request timeout. Proxy rotation, login, stealth, CAPTCHA solving, and browser rendering are not used. Keep batches small and respect easyJet terms, robots guidance, rate limits, privacy obligations, and applicable law.

Actor cost depends on the actual runtime and platform allocation, including request time, retries, storage, and any platform resources used. No fixed price is promised here.

The Actor is not affiliated with easyJet. Public fare availability, prices, and dates can change after a run. A local fixture proves parser behavior only; it does not prove current source availability or Apify Cloud qualification.

Local validation

From this Actor directory:

npm install
npm test
npm run lint
npm run validate
npm run check
apify validate-schema
apify run --purge --input-file test/inputs/fixture.json

To validate a particular stored run, set APIFY_LOCAL_STORAGE_DIR to that run's isolated storage before npm run validate. No remote build, run, deployment, or account mutation is performed by these local checks.