Price Tag FX field guide
How cached exchange rates work when you travel
Price Tag FX stores successful Frankfurter rate downloads on the iPhone by base currency. When a cached snapshot covers the source and target currencies, the app can calculate a conversion locally without fetching a rate at that moment. It tries to warm the selected scanner-market rates once per session and refreshes when usable cached data is older than 12 hours. Rates are shown as stale from 14 days, but a covered stale snapshot can still return an estimate. Offline conversion therefore works only after a successful download and never guarantees a current bank or checkout rate.
What the app downloads and stores
The live environment uses Frankfurter’s public v2 API without an API key. A refresh asks for the selected base currency and app-supported quote currencies. The response contains rate records and provider dates. Price Tag FX converts them into a snapshot, keeps it in memory for the session, and writes a JSON cache under the app’s private Application Support directory. Snapshots are stored by base currency, with a legacy single-file cache retained for migration compatibility.
No scanned image, OCR text, product name, manual amount, or conversion result is required in the rate request. The request does reveal ordinary network metadata to the provider and includes the currency codes being requested. Frankfurter supplies reference data; it is not the card issuer, merchant, or cash exchange that will execute your transaction.
- Choose the destination market while you still have reliable internet access.
- Open the app and allow the session warmup to obtain or validate a usable snapshot.
- Check the rate-information screen for freshness and the last refresh time.
- Repeat for another base market when your trip crosses into a different currency area.
- Snapshots are persisted by base currency.
- Cross-currency conversion can work through a snapshot base when both rates are present.
- A selectable currency can temporarily lack current provider coverage.
- The rate request contains currency metadata, not shopping content.
Source: Frankfurter v2 documentation
Fresh, cached, and stale are status labels
A snapshot fetched on the current local day is labeled fresh. After that day and before 14 days, the status is cached with its age. At 14 days or more, it is labeled stale. Conversion itself does not automatically reject a stale covered snapshot, so the app can still provide an offline estimate while making the age visible. The user decides whether that age is acceptable for the purchase.
The session warmup uses a finer 12-hour window. If a cache covering the requested quotes is newer than that window, it avoids another provider call for that base during the session. If it is older, the app attempts to fetch. When fetching fails, it falls back first to a cache for the requested base and then to the latest supported snapshot, provided that snapshot can actually convert the requested currencies.
- Read the freshness label rather than assuming cached means current.
- Refresh before a high-value purchase when connectivity is available.
- If offline, verify that the result shows a meaningful last-updated date.
- Reject the estimate for your own decision when the market moved too much or the cache is too old.
- 12 hours controls automatic warmup behavior.
- 14 days controls the stale status.
- Stale does not mean deleted; it means the estimate needs extra caution.
- No covered snapshot means no offline conversion.
Manual refresh has product-tier cooldowns
The Manual rate-information sheet exposes a user-triggered refresh. A free user can make one attempt per rolling 86,400 seconds. Paid access—whether lifetime or an active 7- or 30-day non-renewing pass—reduces that cooldown to 30 seconds. The app records the attempt before the provider request completes, so a timeout or provider failure can still start the cooldown.
This behavior supports copy such as more frequent manual refresh with Pro. It does not support a literal unlimited live-rate stream. Conversion always uses the snapshot already obtained; pressing refresh requests a new snapshot and then recalculates the current manual result. Price displays should continue working from a valid cache even when another refresh is temporarily unavailable.
- Open Manual and the rate-information sheet.
- Inspect the current status before requesting a refresh.
- Refresh only when the connection is likely to complete.
- Wait for the current tier’s cooldown when the action is limited.
- Free: one attempt per rolling 24 hours.
- Paid: one attempt per 30 seconds.
- A failed attempt can still consume the interval.
- Travel passes start at purchase time and do not auto-renew.
Prepare for real travel conditions
Before a flight, train journey, border crossing, or rural shopping trip, open Price Tag FX on Wi-Fi and set the first source market. Check a sample manual conversion and the rate date. If you will visit several currency areas, change the source market and warm each base while connected. Do not rely on a cache you have never tested for the pair you need.
During the trip, use cached conversion to orient your budget, but verify the local price role and checkout total first. Large purchases deserve a fresh comparison and a review of card fees. A merchant’s dynamic currency conversion offer is independent of the app’s cache. If the app and terminal differ, compare rate dates, markups, and source amounts rather than assuming either display is a mistake.
- Warm each destination base before departure.
- Confirm target-currency coverage with a manual test.
- Record the last-updated time for an offline day.
- Use stale results only with deliberate caution.
- Verify checkout and payment-provider pricing separately.
What this workflow cannot confirm
- The cache is empty until the app successfully downloads rates.
- A snapshot must contain both sides of the requested conversion path.
- Provider currency coverage and dates can change independently of the app’s selectable currency list.
- Stale snapshots remain estimates and may be inappropriate during volatile market movement.
- Reference data excludes card spreads, merchant conversion markups, cash commissions, and transaction fees.
- This guide is operational information, not financial or exchange-rate advice.
Troubleshooting
Offline conversion says no rate is available
The cache does not cover that pair. Reconnect, select the correct base, and complete a successful refresh before going offline again.
The cache is stale immediately after travel begins
Check the actual fetch time and device clock. Refresh on a reliable connection and confirm the status changes before disconnecting.
A free refresh is blocked after an error
The interval applies to attempts. Wait 24 hours from the recorded attempt, or use an active paid entitlement with the shorter cooldown.
One currency is selectable but never converts
Current provider coverage may be missing. Choose a covered comparison pair or wait for provider data rather than fabricating a rate.
Frequently asked questions
How long do cached rates work?
The app can mathematically use an older covered snapshot, but it labels data stale from 14 days. Decide whether the displayed age is acceptable and refresh whenever possible.
Does the app fetch a rate every time I scan?
No. Scans convert from in-memory or persisted snapshots. Session warmup refreshes only when needed according to cache coverage and the 12-hour window.
Does Pro make rates real time?
No. Pro shortens the manual-refresh cooldown to 30 seconds. Each successful request still produces a snapshot from provider reference data.
Can the cached estimate equal my card charge?
It may be close, but it is not guaranteed. Issuers and merchants can use different rates, times, spreads, and fees.
Take the workflow with you
Try Price Tag FX while you shop.
Free to try, with manual conversion and optional non-renewing Pro access.