Hidden Fee Checker: Hotel, Rental & Ticket Prices avatar

Hidden Fee Checker: Hotel, Rental & Ticket Prices

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Hidden Fee Checker: Hotel, Rental & Ticket Prices

Hidden Fee Checker: Hotel, Rental & Ticket Prices

Check hotel, vacation rental and event ticket prices against the FTC junk fees rule (16 CFR 464, since May 2025): headline prices that leave out mandatory fees, resort and service fees, vague fee names, 'taxes and fees' lumped together and 'fees collected at property' text. Sources per finding.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

Ultimate Foresight Inc

Ultimate Foresight Inc

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 hours ago

Last modified

Share

Check hotel, vacation rental (Airbnb, Vrbo, Booking.com) and live-event ticket prices against the FTC Rule on Unfair or Deceptive Fees (16 CFR Part 464), in effect since May 12, 2025. The Hidden Fee Checker compares the headline price with the total price including all mandatory fees, works out the fee gap per stay or per order, and flags resort, destination and facility fees, vague fee names like "service fee", "taxes and fees" lumped together and text such as "resort fee collected at the property" or "price excludes fees". Click Start with the prefilled example to see it work.

This is an automated screen of the price data you supply, not a legal determination. A clean result doesn't mean an offer meets the FTC rule or state laws such as California's SB 478; how prices are displayed on the page also matters. Not legal advice; every row carries this disclaimer and a timestamp.

What does the Hidden Fee Checker do?

  • ✅ Headline price below the total (high): the shown price (per night or per ticket times the stay or quantity) is lower than base price plus mandatory fees. Government taxes, shipping and optional add-ons are excluded, as in the rule.
  • ✅ Fees collected later: text like "resort fee payable at the hotel", "plus fees" or "price does not include fees". Phrases such as "no hidden fees" or "all-in price" are not flagged.
  • ✅ Resort, destination, facility and similar mandatory fees, each with its amount, per unit or per stay.
  • ✅ Vague fee names such as "service fee", "convenience fee" or "processing fee" (FTC staff guidance asks businesses to say what a fee is for).
  • ✅ "Taxes and fees" combined in one line, which can present business fees as taxes (16 CFR 464.3).
  • ✅ Large mandatory fees (20% or more of the base) and per-night prices without a stay length as lower-severity notes.
  • ✅ Listing type: short-term lodging, live-event ticket or other (the two categories the FTC rule covers), detected from your fields and text.
  • ✅ Output per listing: listingType, displayedPrice, requiredUpfrontTotal, feeGap, mandatoryFees, governmentCharges, feeBreakdown, riskLevel, issues (ruleId, severity, message, quote, sourceUrl, fixHint), checkedAt and a disclaimer.

Who is it for?

  • Hotels, vacation rental managers and Airbnb hosts checking how their prices appear on booking sites.
  • Ticketing platforms, venues and promoters reviewing all-in pricing.
  • OTAs, metasearch and price comparison sites auditing partner listings at scale.
  • Consumer advocates, journalists and researchers measuring drip pricing across scraped listings.

How to check prices for hidden fees

  1. Click Start with the prefilled example (a hotel, a ticket order and an all-in cabin price).
  2. Replace Offers with your own: displayedPrice plus fees (name, amount, optional per such as night or ticket, mandatory, government), or totalPrice, and nights or quantity.
  3. Or enter a Dataset ID from an Airbnb, Booking.com, Expedia, Vrbo or ticket scraper. Common fields are detected automatically; use Field map with dotted paths for nested ones.
  4. Turn on Only save rows with findings to skip clean listings; you only pay for saved rows.
  5. Export results as CSV, Excel or JSON, or fetch them through the API.

Input example

This is the prefilled input:

{
"offers": [
{
"id": "EXAMPLE-HOTEL",
"title": "Example beach hotel, 2 nights",
"listingType": "lodging",
"displayedPrice": 189,
"priceUnit": "per night",
"nights": 2,
"fees": [
{
"name": "Resort fee",
"amount": 35,
"per": "night",
"mandatory": true
},
{
"name": "Taxes",
"amount": 51.03,
"government": true
}
],
"description": "Resort fee collected at the property."
},
{
"id": "EXAMPLE-TICKET",
"title": "Example concert, 2 tickets",
"listingType": "ticket",
"displayedPrice": 79,
"priceUnit": "per ticket",
"quantity": 2,
"fees": [
{
"name": "Service fee",
"amount": 18.5,
"per": "ticket",
"mandatory": true
},
{
"name": "Facility charge",
"amount": 4,
"per": "ticket",
"mandatory": true
},
{
"name": "Taxes and fees",
"amount": 9.6
}
]
},
{
"id": "EXAMPLE-CABIN",
"title": "Example cabin, 3 nights (all-in price)",
"listingType": "lodging",
"displayedPrice": 642,
"totalPrice": 642,
"nights": 3,
"fees": [
{
"name": "Cleaning fee",
"amount": 90,
"mandatory": true,
"includedInPrice": true
}
],
"description": "Total price includes all fees, before taxes."
}
]
}

Dataset mode:

{"datasetId": "YOUR_DATASET_ID", "fieldMap": {"displayedPrice": "price.rate.amount", "totalPrice": "price.breakDown.total.price", "priceUnit": "price.qualifier", "nights": "numberOfNights"}, "listingType": "lodging", "onlyFlagged": true}

Output example

Real output from a run of the prefilled input on 2026-10-31 (long finding lists are shortened here; the run returns all of them):

[
{
"itemNo": 1,
"listingId": "EXAMPLE-HOTEL",
"title": "Example beach hotel, 2 nights",
"listingType": "short-term lodging",
"displayedPrice": 189,
"basePrice": null,
"totalPriceGiven": null,
"requiredUpfrontTotal": 448,
"feeGap": 70,
"mandatoryFees": 70,
"governmentCharges": 51.03,
"optionalOrShipping": 0,
"feeBreakdown": [
{
"name": "Resort fee",
"amount": 35,
"kind": "mandatory",
"perUnit": true,
"included": false
},
{
"name": "Taxes",
"amount": 51.03,
"kind": "government",
"perUnit": false,
"included": false
}
],
"riskLevel": "high",
"issueCount": 4,
"categoriesFlagged": [
"fee_collected_at_property",
"headline_excludes_mandatory_fees",
"resort_or_property_fee",
"total_price_not_provided"
],
"issues": [
{
"ruleId": "headline_excludes_mandatory_fees",
"severity": "high",
"message": "The displayed price (378) is 70 below the price including mandatory fees (448; taxes, shipping and optional add-ons excluded). The FTC rule requires the total price, including mandatory fees, to be shown more prominently than other pricing information.",
"quote": null,
"sourceUrl": "https://www.ecfr.gov/current/title-16/chapter-I/subchapter-D/part-464",
"fixHint": "Show the total price (base plus all mandatory fees) as the headline price; taxes and optional add-ons may be shown later, before payment.",
"gapAmount": 70,
"gapPct": 18.5
},
{
"ruleId": "resort_or_property_fee",
"severity": "medium",
"message": "'Resort fee' is a mandatory per-unit fee of 35 (resort, facility, destination and similar fees). Mandatory fees like this belong in the total price shown up front.",
"quote": "Resort fee",
"sourceUrl": "https://www.ecfr.gov/current/title-16/chapter-I/subchapter-D/part-464",
"fixHint": "Include it in the headline/total price."
},
{
"...": "2 more findings: fee_collected_at_property 'Example beach hotel, 2 nights Resort fee collected at the property.', total_price_not_provided 'No total price was supplied, so the total was comp'"
}
],
"notes": [],
"url": null,
"checkedAt": "2026-10-31T18:43:35+00:00",
"disclaimer": "Automated screening based on the FTC Rule on Unfair or Deceptive Fees (16 CFR Part 464,..."
},
{
"itemNo": 2,
"listingId": "EXAMPLE-TICKET",
"title": "Example concert, 2 tickets",
"listingType": "live-event ticket",
"displayedPrice": 79,
"basePrice": null,
"totalPriceGiven": null,
"requiredUpfrontTotal": 212.6,
"feeGap": 54.6,
"mandatoryFees": 54.6,
"governmentCharges": 0,
"optionalOrShipping": 0,
"feeBreakdown": [
{
"name": "Service fee",
"amount": 18.5,
"kind": "mandatory",
"perUnit": true,
"included": false
},
{
"name": "Facility charge",
"amount": 4,
"kind": "mandatory",
"perUnit": true,
"included": false
},
{
"name": "Taxes and fees",
"amount": 9.6,
"kind": "mandatory",
"perUnit": false,
"included": false
}
],
"riskLevel": "high",
"issueCount": 6,
"categoriesFlagged": [
"headline_excludes_mandatory_fees",
"resort_or_property_fee",
"taxes_and_fees_combined",
"total_price_not_provided",
"vague_fee_name"
],
"issues": [
{
"ruleId": "headline_excludes_mandatory_fees",
"severity": "high",
"message": "The displayed price (158) is 54.6 below the price including mandatory fees (212.6; taxes, shipping and optional add-ons excluded). The FTC rule requires the total price, including mandatory fees, to be shown more prominently than other pricing information.",
"quote": null,
"sourceUrl": "https://www.ecfr.gov/current/title-16/chapter-I/subchapter-D/part-464",
"fixHint": "Show the total price (base plus all mandatory fees) as the headline price; taxes and optional add-ons may be shown later, before payment.",
"gapAmount": 54.6,
"gapPct": 34.6
},
{
"ruleId": "vague_fee_name",
"severity": "medium",
"message": "Fee named 'Service fee' doesn't say what it's for. FTC staff guidance says to describe each fee's purpose and avoid vague names like 'service fee', 'convenience fee' or 'processing fee'.",
"quote": "Service fee",
"sourceUrl": "https://www.ftc.gov/business-guidance/resources/rule-unfair-or-deceptive-fees-frequently-asked-questions",
"fixHint": "Rename the fee to what it pays for, or fold it into the base price."
},
{
"...": "4 more findings: vague_fee_name 'Facility charge', resort_or_property_fee 'Facility charge', taxes_and_fees_combined 'Taxes and fees', total_price_not_provided 'No total price was supplied, so the total was comp'"
}
],
"notes": [],
"url": null,
"checkedAt": "2026-10-31T18:43:35+00:00",
"disclaimer": "Automated screening based on the FTC Rule on Unfair or Deceptive Fees (16 CFR Part 464,..."
},
{
"itemNo": 3,
"listingId": "EXAMPLE-CABIN",
"title": "Example cabin, 3 nights (all-in price)",
"listingType": "short-term lodging",
"displayedPrice": 642,
"basePrice": null,
"totalPriceGiven": 642,
"requiredUpfrontTotal": 642,
"feeGap": 0,
"mandatoryFees": 90,
"governmentCharges": 0,
"optionalOrShipping": 0,
"feeBreakdown": [
{
"name": "Cleaning fee",
"amount": 90,
"kind": "mandatory",
"perUnit": false,
"included": true
}
],
"riskLevel": "none found",
"issueCount": 0,
"categoriesFlagged": [],
"issues": [],
"notes": [],
"url": null,
"checkedAt": "2026-10-31T18:43:35+00:00",
"disclaimer": "Automated screening based on the FTC Rule on Unfair or Deceptive Fees (16 CFR Part 464,..."
}
]

How much does it cost to check listings for hidden fees?

This Actor uses pay-per-event pricing: $0.002 per listing saved plus a $0.00005 start fee per run, plus small platform usage paid by you (a few hundredths of a cent for small runs). That's about $2.00 for 1,000 listings and $20.00 for 10,000 plus usage. With Only save rows with findings on, rows without findings aren't saved or charged. You can set a maximum cost per run in the run options.

Use it through the API, integrations or AI agents

  • Run it and get results in one call: https://api.apify.com/v2/acts/ultimatemc~hidden-fee-price-checker/run-sync-get-dataset-items
  • Use it from AI agents through the Apify MCP server: https://mcp.apify.com?tools=ultimatemc/hidden-fee-price-checker
  • Schedule it after a daily scraper run, send flagged rows to Slack or email with webhooks, or connect it to Make, Zapier, n8n or Google Sheets.
  • Chain it after a lodging or ticket scraper by passing the scraper's dataset ID.

How it works

Checks are deterministic rules written from the text of 16 CFR Part 464 and the FTC's business guidance, checked on 2026-10-31. Prices are parsed from numbers or text ("$1,234.50", "1.234,50 €"), per-unit prices and fees are scaled by nights or quantity, and fee names are classified as mandatory, government, shipping or optional. No AI and no external calls, so the same input always gives the same result.

Sources:

FAQ

Which businesses does the FTC rule cover?

Short-term lodging (hotels, motels, vacation rentals) and live-event tickets. Rows detected as other types get a note; similar state laws, such as California's, apply more widely.

Are taxes counted as hidden fees?

No. Government taxes and fees, shipping and truly optional add-ons may be left out of the total under the rule; the checker excludes them from the gap.

Why is a 'service fee' flagged?

FTC staff guidance says a fee's name should describe what it's for. Generic names are flagged at medium severity so you can review them.

Does it read the booking page?

No. It checks the data you give it (for example a scraper's output). Use any lodging or ticket scraper first and pass its dataset ID.

Is it AI?

No. It's a fixed set of rules, so results are repeatable.

Limitations

  • It can't see how prominently prices are displayed on a page, only the values and text supplied.
  • Fee data is only as complete as the scraper's output; fees not in the data can't be checked.
  • Federal rule and California law only; other states and countries aren't covered.
  • Long-term rentals and non-covered businesses get notes, not findings.

Other tools by Ultimate Foresight

Found a false positive? Open an issue on the Issues tab with the listing data and what you expected, and we'll review the rule.