Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

farenheit logo

farenheit

Geographic price transparency for digital products.

Companies charge different prices for the same product depending on where you appear to be browsing from. farenheit surfaces those differences — live where possible, reference data where not — and tells you exactly how much you're leaving on the table.

/farenheit spotify

  farenheit ── Spotify Premium (Individual)
  ─────────────────────────────────────────
  🇦🇷 Argentina   ARS$369      $0.41    -97%  ✓
  🇹🇷 Turkey      ₺39.99       $1.27    -91%
  🇮🇳 India       ₹119         $1.43    -90%
  🇧🇷 Brazil      R$10.90      $2.01    -86%
  🇺🇸 US          $13.99       $13.99   — (baseline)
  🇬🇧 UK          £11.99       $15.05   +57% ↑
  ─────────────────────────────────────────
  💡 Cheapest: Argentina — save $13.58/mo ($163/yr)

Install

farenheit is a Claude Code skill. It runs inside your Claude Code session — no npm, no Python, no dependencies.

# Copy the skill to your Claude skills directory
cp -r farenheit/ ~/.claude/skills/farenheit/

That's it. Open a Claude Code session and type /farenheit.


How to install

farenheit is a Claude Code skill — a plain Markdown instruction file that Claude reads and executes. No npm, no Python, no API keys.

# Clone or download, then copy to your skills directory
cp -r farenheit/ ~/.claude/skills/farenheit/

Open a Claude Code session. Type /farenheit. That's it.

What Claude Code does under the hood: Claude reads SKILL.md, fetches live prices using the Firecrawl MCP (for URL-based products), fetches live exchange rates from Frankfurter (free, no auth), and formats a sorted comparison table in your terminal. For zip-mode queries, it uses the unified-browser MCP (Playwright).

MCPs required:

  • firecrawl — web scraping (URL-based products + geo-proxy for IP-detected products)
  • unified-browser — Playwright browser automation (for --zip mode)
  • Neither requires paid accounts beyond whatever plan you're already on

Usage

/farenheit [any product name]                     # geo-pricing for any product (catalog or live discovery)
/farenheit --category [category]                  # scan a full category
/farenheit --all                                  # scan everything in the catalog
/farenheit [product] --markets IN,TR,AR           # specific markets only
/farenheit goodrx [drug]                          # intra-US zip comparison (v2a — auto-selects zips)
/farenheit --category domestic                    # scan all domestic products (auto zips)
/farenheit --portfolio [p1],[p2],[p3]             # aggregate savings across your stack (v3)
/farenheit --add [pricing url]                    # auto-generate a catalog entry from any page (v3)
/farenheit --cached [product]                     # skip live scrape, return reference data (fast, no proxy credits)

Categories: streaming · saas · software · cloud · gaming · hardware · domestic

Examples:

/farenheit spotify                         # known product — URL-based scrape
/farenheit grammarly                       # IP-detected product — auto geo-proxy
/farenheit cursor                          # unknown product — live discovery (v4)
/farenheit perplexity pro                  # unknown product — live discovery (v4)
/farenheit adobe creative cloud
/farenheit --category gaming
/farenheit --cached grammarly              # fast reference read, no proxy credits
/farenheit goodrx lisinopril
/farenheit --portfolio spotify,adobe creative cloud,notion,grammarly
/farenheit --add https://linear.app/pricing

Price routing — which approach applies to what

Not all geo-pricing works the same way. farenheit routes each query based on where pricing variance is most likely to exist: internationally (country-level, IP/card detection), domestically (US zip code level, address input), or both.

Service type International Intra-US (zip) Where the variance lives
Streaming (Spotify, Netflix, Disney+) ★★★★★ Country IP at signup. India/Turkey/AR dramatically cheaper.
Gaming (Steam, Xbox, PlayStation) ★★★★★ Country store. Turkey/Argentina 70-90% cheaper on many titles.
SaaS — B2C (Notion, Grammarly, Canva) ★★★★ Country IP. India/LatAm often 50-70% cheaper.
Software licenses (Adobe, JetBrains, MS365) ★★★★ Country URL/card. India/Turkey 30-50% cheaper.
Hardware (Apple, Samsung) ★★★ International: import duties drive variance. Intra-US: sales tax only (~0-10%).
Gig economy (Uber, DoorDash, Instacart) ★★ ★★★★ Intra-US is primary — surge pricing, market rates, delivery fees vary by city/neighborhood.
E-commerce (Amazon, retailers) ★★ ★★★★ Intra-US: same product, different price by delivery zip (seller shipping zones, local competition). International: some products geo-priced but inconsistent.
Insurance (auto, home, renters) ★★★★★ Zip-code-only pricing. Same driver/property profile can be 3x different by state or city.
Home services (contractors, moving, pest control) ★★★★★ Purely local market pricing. Quote same job from NYC vs. Des Moines.
Healthcare / dental ★★★★★ Extreme intra-US variance. Same procedure, same insurance, different zip = wildly different negotiated rates.
Groceries / delivery ★★★★ Instacart, DoorDash markup and fees vary significantly by market.
Cloud / infra (AWS, Vercel, DO) Mostly USD-global. Data center region affects latency/compliance, not price.

How to read this: Five stars = strong signal, worth querying. Dash = negligible variance, not worth the effort.

Routing in practice

  • International query/farenheit [product] — compares across 12 countries
  • Intra-US query/farenheit [product] --zip 10001,60601,90210,78701,98101
  • Both → run international first, then domestic if the service type warrants it (hardware, gig economy)
  • Skip live scrape → add --cached for a fast reference-data read (no proxy credits used)

How it works

For products with URL-accessible regional pricing (live: true in the catalog): farenheit calls the Firecrawl MCP to fetch each regional pricing page and extracts the current price. No proxy needed — these companies expose regional pricing via country-specific URLs (e.g. adobe.com/in/, spotify.com/tr/).

For products with IP-based pricing (live: false): Services like Notion, Grammarly, and Netflix detect your location via IP — a plain URL request always returns your home-country price. farenheit automatically routes these through Firecrawl's built-in geo-proxy (location + proxy: stealth), appearing to originate from each target country. No Smartproxy or Bright Data account required. Your home IP is never exposed to the vendor being checked.

To skip live scraping: Add --cached to get reference data instantly (no proxy credits used). Useful when you just want a ballpark and don't need today's prices.

For intra-US zip pricing (--zip flag, v2a): Some products don't vary by country at all — they vary by US zip code. GoodRx drug prices, Amazon delivery prices, Instacart fees, and insurance quotes all work this way. farenheit uses the unified-browser MCP (Playwright) to automate zip entry and read back the displayed price for each zip you specify.

Currency normalization: All prices are converted to USD using live exchange rates from Frankfurter (free, no auth). Argentine Peso (ARS) is excluded from Frankfurter due to exchange controls — shown as local price with a note.

12 international markets tracked: United States · India · Brazil · Mexico · Turkey · Argentina · Poland · Thailand · Philippines · Nigeria · United Kingdom · Germany


Coverage

Category Products Mode Notes
Streaming 6 International Spotify, Netflix, Disney+, Apple TV+ live
SaaS 12 International URL-based for some; geo-proxy auto-used for IP-detected (Notion, Grammarly, Canva, Zoom)
Software 4 International Adobe CC, Microsoft 365, JetBrains live
Cloud 4 Control USD-global — included as control examples
Gaming 5 International Xbox, PlayStation, Nintendo, Steam live
Hardware 2 International + domestic Apple MacBook, iPhone — import duty variance
Domestic 6 Intra-US zip GoodRx, Amazon, Instacart, DoorDash, The Zebra, Thumbtack

Controls included: GitHub Pro, Vercel Pro, DigitalOcean — products that charge the same price globally. Useful baseline for what no geo-pricing looks like.


Saving money — how to actually pay the cheaper price

Finding a price gap is the easy part. Paying at the cheaper rate requires two things simultaneously: appearing to be in that country (VPN at signup) and a payment method the service accepts from there. Most services check both.

Three approaches, ranked by ease

1. Gift cards — cleanest, lowest friction

Buy a gift card denominated in the target country's currency from a reseller, redeem it via VPN. No foreign payment method needed.

Works best for: Spotify, Xbox Game Pass, PlayStation Plus, Nintendo, Steam Where to buy: Seagm.com, G2G.com, Eneba.com, Kinguin

Example: An Indian Spotify gift card costs ~$6 and covers 3 months. That's $2/mo vs $12.99.

2. Wise or Revolut — best for SaaS and software

Wise and Revolut both offer multi-currency accounts with local billing addresses per country. An INR balance with an Indian billing address passes Stripe's country check — which is what most SaaS tools use.

Works best for: Adobe CC, Microsoft 365, JetBrains, most SaaS tools

Why it works: Stripe checks the card's BIN (first 6-8 digits — identifies issuing bank country) and billing address, not your IP. A standard US Amex has a US BIN and US billing address regardless of VPN. A Wise/Revolut INR card has a non-US BIN and Indian billing address → Stripe reads it as an Indian payment → accepts Indian pricing. Foreign transaction fees on your existing card are irrelevant — it's the card's registered country that matters.

Wise vs. Revolut: Revolut has deeper local banking partnerships in more countries (especially IN, TR, AR), meaning its card BIN reads more like a local issuer. Wise is more universally accepted and easier to set up. Try Revolut first for high-variance markets; Wise works well for most SaaS.

3. VPN at signup — hit or miss

Some smaller SaaS products only check your IP at the pricing page and don't re-verify at payment. Sign up through a VPN, pay with your normal card.

Works best for: Smaller SaaS tools that geo-price at the marketing layer but use a global payment processor.

Quick reference by service

Service Best approach Risk
Spotify Gift cards (Seagm) Medium — AR/TR accounts get reset periodically
Xbox Game Pass Gift cards Low
PlayStation Plus PSN gift cards from target country Low
Steam Change store country + local gift card Low (once/year limit)
Adobe CC Wise card with IN/TR billing Medium
Microsoft 365 Wise card with IN billing Low
JetBrains Currency param at checkout + any card Very low
Netflix Gift cards or local payment method required High — aggressive detection

The honest risk

This is a ToS gray area, not illegal. Prices are publicly listed — you're not hacking anything. But most ToS require you to use the service from the country you signed up in. Consequences range from account reset to home-country pricing (common) to account suspension (rare, mostly affects bulk resellers). Each person decides their own tolerance.


Notable findings

A few highlights from the catalog that surprised us when building this:

  • Spotify Argentina: ~97% cheaper than US ($0.41 vs $13.99/mo)
  • Xbox Game Pass Ultimate Turkey: ~88% cheaper ($2.30 vs $19.99/mo)
  • Adobe Creative Cloud India: ~40% cheaper than US
  • JetBrains All Products: dramatic regional discounts — one of the most developer-friendly pricing structures
  • Brazil iPhone: ~60% more expensive than US (import tax)
  • GitHub Pro: Same $4/mo everywhere — pricing transparency done right

Open-world mode (v4)

The catalog is a speed cache, not a gate. Ask for any product and farenheit will:

  1. Check catalog.json for known URL patterns and reference data. If found → use it (fast path).
  2. If not in the catalog → search the web via Firecrawl, find the pricing page, and probe it.
  3. Classify the product: URL-based regional pricing → scrape per country. IP-based → auto-retry with geo-proxy. Same price everywhere → mark it a control and move on.

No --add step required before a query works. Unknown products just work — they're a little slower on the first call, and the session can optionally propose a catalog entry to cache the result for next time.


The catalog is the IP

catalog.json is a community-maintained list of products, regional URLs, and reference prices. PRs are the highest-value contribution — if you find a product with regional pricing not in the catalog, add it.

To add a product:

  1. Determine if it has URL-accessible regional pages (live: true) or IP-based detection (live: false)
  2. Find the regional URL pattern or gather reference prices from each market
  3. Add an entry to catalog.json in the appropriate category
  4. Test with /farenheit [your product]
  5. Submit a PR

See catalog.json for entry format and examples.


v2a — Intra-US zip mode

The underreported story: the same product can cost meaningfully different amounts depending on your US zip code. GoodRx drug prices, Amazon delivery pricing, Instacart fees, DoorDash charges, auto insurance quotes — all vary by zip without any international component.

/farenheit goodrx lisinopril --zip 10001,60601,90210,78701,98101
/farenheit amazon B09B8RVKGM --zip 10001,60601,90210
/farenheit instacart --zip 10001,33101,98101
/farenheit --category domestic --zip 10001,60601,90210,78701,98101

Why it works differently than international: International geo-pricing is URL-addressable — change the URL path, get a different price. US zip-based pricing almost always requires form interaction: entering a delivery zip, submitting a quote form, clicking through to a price. farenheit uses the unified-browser MCP (Playwright) for this.

Exception: GoodRx embeds zip as a URL parameter (?zip=10001), so it works via Firecrawl — no browser automation needed. It's also the most compelling zip-mode target: same drug, same dosage, radically different cash price by zip and pharmacy chain. Entirely public data, zero ToS risk.

Service Method Expected variance
GoodRx URL param (?zip=) Same drug, 10x price range by zip + pharmacy
Amazon Browser — set delivery zip $0–50 on same SKU by seller shipping zone
Instacart Browser — zip at store select Service fees + markup vary 2-3x by market
DoorDash Browser — location entry Delivery + service fees vary by market density
The Zebra Browser — zip + driver profile Auto insurance 2-4x by state
Thumbtack Browser — zip + job type Home services 3-5x by market (NYC vs. Des Moines)

v2b — Geo-proxy for IP-based products (always-on)

Many products in the saas and streaming categories are marked live: false because they detect your location by IP — a plain URL request always returns your home-country price. farenheit routes these automatically through Firecrawl's built-in geo-proxy, with no paid proxy subscription required.

/farenheit notion      # auto geo-proxy — fetches live prices across 12 markets
/farenheit grammarly
/farenheit hulu

How it works: Firecrawl has a built-in location parameter ({country: "IN", languages: ["en-IN"]}) combined with proxy: "stealth" that routes the scrape through a geo-specific residential IP. This is part of the Firecrawl MCP — no Smartproxy, Bright Data, or external proxy account required. Your home IP is never exposed to the vendor being checked.

Products that use this path automatically: Notion, Grammarly, Canva (paid tiers), Zoom, Hulu, Peacock, Paramount+. To skip live scraping and return reference data only, add --cached.


Roadmap

  • v1: International geo-pricing — 32 products, 12 markets, live scraping + reference data ✓
  • v2a: --zip mode — intra-US pricing via Playwright + Firecrawl (6 domestic products) ✓
  • v2b: Firecrawl geo-routing for IP-based products ✓
  • v3: --portfolio, --add, risk-scored "How to pay" output ✓
  • v4: Open-world mode — any product works, catalog is a cache not a gate (Firecrawl search + URL probe + auto geo-proxy) ✓
  • v1.3: Geo-proxy is now always-on for live: false products (no --proxy flag needed); --cached flag for reference-data-only reads ✓
  • v5: --watch mode — price change alerts (requires Supabase persistence)
  • v6: --travel mode — Amadeus API for flight/hotel geo-pricing

License

MIT — do whatever you want with it.

Built by Jeff Littell / JGL Ventures.

About

Geographic price transparency for digital products — a Claude Code skill

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors