Business & First Class Deal Validator
Pricing
from $0.40 / 1,000 itinerary evaluateds
Business & First Class Deal Validator
Find the catches in a premium-cabin itinerary before you choose. Review mixed cabins, price details and connection timing using flight options you already have.
Pricing
from $0.40 / 1,000 itinerary evaluateds
Rating
0.0
(0)
Developer
Critical Distinction
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 days ago
Last modified
Categories
Share
Find the catches before you choose your flight.
A premium fare can include an economy leg, an awkward connection or unclear pricing. Review the itineraries you already have and see the details that need attention. This tool does not search for or book flights.
Try the demo · Review your options · Pricing · Help
What you get
A focused itinerary review and a CSV comparison list. Open REPORT.html to see which checks pass, flag a problem or need more information. Download REVIEW.csv for the working list. Missing details remain visible rather than becoming a confident answer.
The optional Value Brief compares compatible options in your own shortlist. The Arrival-Margin Brief compares supplied scheduled times with your commitment and chosen ground-time allowance. Neither predicts delays, values your productivity or guarantees arrival on time.
Demo
Leave Demo selected to explore three fictional itineraries. Run and open REPORT.html from Output. The example shows mixed cabins and missing details, not current deals you can book.
The demo has no custom itinerary-review charge. Apify's automatic $0.00005 per start still applies; check the displayed maximum cost.
Start here
- Select Evaluate and prepare a copy of your data using the segment CSV below.
- Paste it into Start with the segment CSV template. Use one row per flight segment and leave other input routes empty.
- Run and open REPORT.html. Review the supplied tradeoffs, then confirm price, cabin, availability and conditions with the booking source before buying.
Already have a compatible Dataset or JSON export? The supported import option can save that preparation step. Keep passenger names, booking references and payment details out of inputs.
Segment CSV template
customerId,quoteId,tripType,adults,price,currency,priceBasis,taxes,observedAt,expiresAt,fareConditions,direction,flight,origin,destination,departure,arrival,durationMinutes,cabins,lieFlat,selfTransfer,sourceId,pointOfSaleexample,Q1,one_way,1,2000,USD,whole_party,unknown,,,,outbound,XX1,JFK,LHR,,,420,business,,,supplied-export,US
This row is fictional. Repeat itinerary-wide fields consistently across segments. Use round_trip with both directions for a return journey. Keep unknown values blank; add observation times only when you know when prices were collected. Upload time is not price freshness.
Pricing
$0.50 per 1,000 complete-itinerary evaluations ($0.00050 each at the base rate), including this Actor's platform usage, plus $0.00005 per start. There is no Dataset-row surcharge.
| Apify plan | Price per complete-itinerary evaluation |
|---|---|
| Free | $0.00050 |
| Bronze | $0.00045 |
| Silver | $0.000425 |
| Gold / Platinum / Diamond | $0.00040 |
Segments, comparison groups and arrival scenarios do not multiply an itinerary's charge. Finding a problem can still be a useful billable evaluation. Rejected imports, duplicates and information-only unknown results are not eligible.
Results are saved before the custom charge. Check current pricing and the maximum cost before starting. Account subscriptions, taxes and unrelated services are separate. An unknown charge may already have settled; it is not automatically retried.
See what the upgrade buys
The optional Value Brief puts extra stated price beside known cabin time, lie-flat time and total travel time. It compares your shortlist, not the wider fare market. The least expensive option means the least expensive comparable option you supplied.
Prices are compared only when trip, party, currency, taxes, fees and structured fare conditions support a fair comparison. Missing or incompatible facts remain visible. There is no invented value for working time, comfort or productivity.
For example, two comparable historical options priced GBP 1,000 and GBP 1,250 have a GBP 250 difference. If the second provides 30 more known premium/lie-flat minutes and saves 30 elapsed minutes, the brief shows those tradeoffs without declaring a universal winner. Historical prices are not current offers. The complete fictional comparison below can be copied into the advanced input editor.
See the time left before your commitment
The optional Arrival-Margin Brief subtracts your ground-time allowance from the time between scheduled arrival and your appointment. You supply the allowance for arrival formalities, baggage, ground travel and any reserve time; the Actor does not estimate those components.
An arrival at 13:00 before a 15:00 commitment leaves 60 minutes after a 60-minute allowance, or 30 minutes after a 90-minute allowance. Positive arithmetic is not a delay forecast, protected connection or on-time guarantee. Unknown fare terms can prevent a price comparison while leaving a supported scheduled-time calculation available.
Neither optional brief changes the original itinerary's eligibility or introduces additional billing units.
Limits and interpretation
Up to 100 itineraries with 16 segments each are supported. Dataset/export/CSV input is limited to 4 MiB; complete JSON input to 8 MiB; existing result bounds are 16 MiB. Comparison groups allow at most 100 unique memberships in total. Row ceilings do not override byte limits.
A passed check reflects supplied information, not current availability. Even a recently observed fare can be unavailable at booking. The Actor does not fill in missing cabin, tax, seating, fare, connection-protection or observation facts. It does not certify minimum connections, visas, entry requirements or passenger protection.
Help
Use the Issues tab for help preparing input or interpreting a result. Include a run ID for run problems and use fictional examples, not booking records or access links.
A stopped run may already have results or charges. Inspect its Output and billing state before starting another.
Advanced reference
Input and policy
Choose one completed Dataset, supported JSON export, offersCsv or normalized offers. The default policy accepts Business/First, permits at most 15% known nonrequested-cabin time, requires no unknown-cabin time for a qualifying option, and allows two stops per direction. Advanced policy can add lie-flat, connection, elapsed-time and price-target requirements. Currency and price basis must match; no exchange conversion is performed.
CSV cabins use business, first, economy, premium_economy or unknown; per-adult cabin values use |. Absolute timestamps need explicit offsets. Missing return legs do not form a complete round trip. Unknown, future or over-15-minute-old observation times cannot establish a fresh candidate. A useful rejection can coexist with other missing evidence.
Existing Dataset or JSON export compatibility
A completed Dataset or unchanged JSON array export can use the pinned poidata-google-flights-0.1.70 format. Supply either Existing compatible Dataset ID with run-token READ access or Dataset JSON export, not both. Leave segment CSV and normalized offers empty. Set sourceObservedAt only from a known source observation time.
This adapter supports one adult, no children or infants. Larger parties use normalized CSV with an explicit price basis. A supplied version marker must match; changed required fields are rejected. Unknown UTC offsets do not establish connection timing or freshness. Arbitrary JSON and other scraper versions are not implied compatible. Format compatibility does not grant data-use permission or include an upstream acquisition service.
Premium Value Brief example
Use the complete JSON below in the advanced input editor, with other input routes empty. It supplies two historical fictional alternatives for one request and party. Option B costs GBP 250 more, has 30 more known premium/lie-flat minutes and saves 30 elapsed minutes. Both remain non-dominated on the selected priorities. The prices are expired and are not current buying recommendations. Normal Evaluate pricing applies; check the displayed maximum charge.
{"mode": "evaluate","offers": [{"customerId":"option-a","quoteId":"fictional-option-a","sourceId":"fictional-export","pointOfSale":"GB","tripType":"one_way","adults":1,"price":"1000.00","currency":"GBP","priceBasis":"whole_party","taxes":"included","observedAt":"2026-10-03T12:00:00Z","expiresAt":"2026-10-03T12:15:00Z","fareConditions":"Fictional supplied terms; see explicit structured facts.","segments":[{"direction":"outbound","flight":"FA1","origin":"LHR","destination":"BOS","departure":"2026-10-20T06:00:00Z","arrival":"2026-10-20T09:00:00Z","durationMinutes":180,"cabins":["business"],"lieFlat":true,"selfTransfer":false},{"direction":"outbound","flight":"FA2","origin":"BOS","destination":"JFK","departure":"2026-10-20T10:00:00Z","arrival":"2026-10-20T13:00:00Z","durationMinutes":180,"cabins":["business"],"lieFlat":true,"selfTransfer":false}]},{"customerId":"option-b","quoteId":"fictional-option-b","sourceId":"fictional-export","pointOfSale":"GB","tripType":"one_way","adults":1,"price":"1250.00","currency":"GBP","priceBasis":"whole_party","taxes":"included","observedAt":"2026-10-03T12:00:00Z","expiresAt":"2026-10-03T12:15:00Z","fareConditions":"Fictional supplied terms; see explicit structured facts.","segments":[{"direction":"outbound","flight":"FB1","origin":"LHR","destination":"JFK","departure":"2026-10-20T06:00:00Z","arrival":"2026-10-20T12:30:00Z","durationMinutes":390,"cabins":["business"],"lieFlat":true,"selfTransfer":false}]}],"comparisonGroups": [{"id":"fictional-shortlist", "tripId":"fictional-request", "partyId":"fictional-party","adults":1, "tripType":"one_way","directions":[{"direction":"outbound","origin":"LHR","destination":"JFK","travelDate":"2026-10-20"}],"currency":"GBP", "priceBasis":"whole_party", "pointOfSale":"GB","fareTerms":{"refund":"nonrefundable","changes":"permitted","changeFee":"0.00","fareDifferenceApplies":true,"cabinBaggage":{"pieces":1,"kilogramsPerPiece":8},"checkedBaggage":{"pieces":1,"kilogramsPerPiece":23},"noOtherMaterialRestrictions":true},"purpose":"historical","priorities":["lower_price","shorter_travel","more_premium_time","more_lie_flat_time"],"members":[{"customerId":"option-a","tripId":"fictional-request","partyId":"fictional-party","departureLocal":{"outbound":"2026-10-20T07:00:00+01:00"},"feesIncluded":true,"fareTerms":{"refund":"nonrefundable","changes":"permitted","changeFee":"0.00","fareDifferenceApplies":true,"cabinBaggage":{"pieces":1,"kilogramsPerPiece":8},"checkedBaggage":{"pieces":1,"kilogramsPerPiece":23},"noOtherMaterialRestrictions":true}},{"customerId":"option-b","tripId":"fictional-request","partyId":"fictional-party","departureLocal":{"outbound":"2026-10-20T07:00:00+01:00"},"feesIncluded":true,"fareTerms":{"refund":"nonrefundable","changes":"permitted","changeFee":"0.00","fareDifferenceApplies":true,"cabinBaggage":{"pieces":1,"kilogramsPerPiece":8},"checkedBaggage":{"pieces":1,"kilogramsPerPiece":23},"noOtherMaterialRestrictions":true}}]}]}
Value-Brief settings
Each group declares its trip, party, directions, currency, price basis, point of sale, fare terms, purpose and priorities. IDs are opaque labels, not passenger names. Members bind existing itineraries by customerId and explicitly confirm matching scope. departureLocal records each direction's first departure with its actual offset; its instant must equal the itinerary timestamp and its local date must match travelDate. A group label alone does not establish comparability.
Structured fareTerms must agree for the group and each member:
refund:fully_refundable_before_departure,nonrefundableorunknown.changes:permitted,not_permittedorunknown. Permitted changes need knownchangeFeein the group currency andfareDifferenceApplies; when changes are not permitted, both are null.cabinBaggageandcheckedBaggage: pieces and kilograms per piece; zero pieces uses zero kilograms.noOtherMaterialRestrictions: trueconfirms no omitted material restriction.
Complex deadlines, partial refunds or restrictions not represented by these fields must remain unknown or make that confirmation false. The price comparison is then excluded. Free-text fare notes do not supply missing structured facts. These are your declarations, not independently verified terms.
purpose: current requires the existing fresh, future, policy-qualified review candidate. historical allows old/expired observations with consistent known clocks and is labelled not a current buying recommendation. Neither changes original publication eligibility or charge. Missing, incompatible, duplicate and ungrouped options remain visible. At least two eligible alternatives are required for a price difference or shortlist.
Select distinct priorities from lower_price, shorter_travel, more_premium_time, more_lie_flat_time and fewer_stops, in display order. An option is dominated only when another is no worse on every selected objective and better on at least one. Unknown objectives cannot establish dominance. Conflicting tradeoffs and ties survive; IDs break display ties only. The brief displays ten choices and counts additional non-dominated options. More cabin minutes may reflect a detour, not a better trip.
valueComparison retains exact minor-unit prices, nullable differences, known minutes, exclusions and shortlist membership in existing rows. REPORT.html and REVIEW.csv provide readable fields; OUTPUT.premiumValueBrief provides group summaries. Premium/lie-flat minutes require qualifying evidence for every adult in a segment. Elapsed travel includes connections within directions, not time at the destination. IDs and local timestamps are limited to 128 UTF-8 bytes; existing input/result limits still apply.
Arrival-margin example and settings
Add the following field inside the single comparisonGroups object in the complete example, alongside members. It is not a complete itinerary request:
"arrivalCommitment": {"commitmentTime":"2026-10-20T15:00:00Z","direction":"outbound","arrivalAirport":"JFK","scenarios":[{"id":"one-hour","totalGroundMinutes":60},{"id":"ninety-minutes","totalGroundMinutes":90}]}
Option A arrives at 13:00Z: the supplied allowances leave 60 or 30 minutes. Option B arrives at 12:30Z: they leave 90 or 60 minutes. The old quotes remain expired even when scheduled margins are positive.
Select outbound or return; direction is not inferred. commitmentTime needs an explicit offset. The final flight in that direction must match declared trip endpoints and local departure date/instant. An omitted arrivalAirport uses only the declared direction's destination; a conflicting airport remains unresolved.
One to three distinct scenarios have literal IDs up to 128 UTF-8 bytes and integer totalGroundMinutes from 0–10080, or null for unknown. Zero means an explicit zero allowance. Missing clocks, commitment, direction or allowance stay unresolved. Date/offset crossings, fractional minutes and negative margins remain visible. Zero margin has no reserve time.
REPORT.html and REVIEW.csv show clocks, airport, allowances and margins. Existing rows add arrivalMargin, retaining source observation, freshness and publication state; OUTPUT group summaries retain all scenarios and unmatched member IDs. Monitor CHANGES does not classify changes to comparison assumptions as itinerary changes.
Repeated reviews, privacy and recovery
OUTPUT links canonical JSON, REPORT.html and REVIEW.csv. The Dataset is a convenience view; a failed append does not erase saved reports. Monitor uses named history storage and state.scopeId, with optional baselineSnapshotId. CHANGES.json/CSV distinguishes source, decision, clock and input changes. History is accepted for 90 days; missing or ambiguous history is disclosed. Hosted historyStoreId must match any supplied state.storeId. This grants storage access, not a schedule.
Limited permissions apply. Select only necessary input/history resources and suitable storage access and retention. The Actor does not automatically delete stored inputs/results, connect to private booking systems or relay customer files to our workstation. Keep personal and payment details out of inputs. Evidence excludes raw upstream errors and unrelated fields.
Publication and history intent are recorded before submission. Unknown total charges remain unknown, not zero. The same interrupted run does not resubmit results or charges; a stopped worker is not a successful completion. Inspect saved output and billing before a new run. This is not a transaction or a promise that an uncertain request was cancelled. The charge event remains itinerary-evaluated.
Existing saved workflows
New users can start with Demo. Existing tasks can retain older builds; preserve original input and read the Actor's Changelog tab before changing a saved workflow. The Value Brief requires the 0.4 family or later; Arrival Margin requires 0.5. Omitting comparison groups preserves the ordinary itinerary review.


