How the data works
Every number on this site is either a price a visitor logged, from a receipt, a menu board or the app, or a dated price listed by an outside tracker, and every one says which. There is no official source, so read each figure alongside where it came from and how old it is.
Why prices differ between stores
Most McDonald’s locations in the United States are owned by independent franchisees rather than the corporation. Those owners set their own menu prices, which is why a store in one suburb can charge a dollar more than a store fifteen minutes away for an identical sandwich. Rent, labour costs, and local competition all push the number around.
Corporate publishes no per-store price list, and franchise pricing is not disclosed anywhere central. Short of the McDonald’s app, the practical way to know what a store charges is for somebody who has been there to say so.
Where the data comes from
Store locations come from OpenStreetMap, a public map database maintained by volunteers, used under the Open Database Licence. Some entries carry a full street address and some carry none at all. Where an address is missing upstream, the site shows nothing rather than inventing one.
Prices come from two places: contributors, and the outside price feeds listed below. Each submission records the store, the price in cents, whether it was in store, drive-thru, mobile app, or delivery, and a server-side timestamp.
Reading a price from a photo
The form on each store’s page can read the price from a photo of your receipt, or from a screenshot of the McChicken in the McDonald’s app. Your browser does the reading; the photo is never uploaded, to this site or anyone else. Only the price you then log is sent, exactly as if you had typed it, so the card digits and order number on a receipt stay on your phone.
It fills in the price for you to check, and nothing is logged until you press the button. It fills in nothing if the photo is from a different store, if the receipt is more than a week old (a price is recorded as today’s), or if all it shows is a meal or a Spicy McChicken. Stores are matched by the restaurant number every receipt prints, using McDonald’s locations as published by All The Places under CC0.
How submissions are checked
Crowdsourced data attracts bad entries, some careless and some deliberate. Four things push back:
- Anything outside $1.00 to $15.00 is rejected outright, at the database level rather than only in the form.
- One submission per device per store per day, also enforced at the database level.
- A report more than 40% away from what a store is currently listed at does not change the price on its own. It is held until a second report agrees with it, within 5%.
- Each store shows one price: the most recent report that passed the check above. A newer price replaces the old one, and nothing is averaged.
Replacing has a cost. An average absorbs a single wrong number better. Replacing catches a real price change sooner, and the figure on screen is one somebody actually saw on a menu board instead of a midpoint nobody was ever charged. The held-report rule limits the cost: no single report can move a price far, while two that agree can move it anywhere. That is also how a store recovers if its very first report was wrong.
Delivery prices are recorded but can never become a store’s price. Delivery platforms add their own markup, so those numbers describe a different transaction than walking in.
Price feeds
Some prices come from outside feeds rather than from visitors. Each is shown under the feed’s name with a date, links back to the feed’s own page for that store, and is never counted as a visitor’s report. A visitor’s price logged after a feed’s replaces it, and a feed’s price can also confirm a report that was being held for a second opinion.
- MenuPriceTracker, which says it reads its prices from the McDonald's app. Shown without a licence while we ask for one, and removed if the answer is no. Its prices are read from its public store pages, at the pace its robots.txt asks for. Its pages give a month rather than a day for each store, so its prices are dated by the day we read them, and say “checked”.
How to read a price
A visitor’s price is shown with the number of reports behind it. A store with one report and a store with thirty should not be trusted equally, and showing the count is the honest way to say so. A feed's price is shown with the feed's name and the day it was dated instead, because it is one listing, not a count of people.
Prices older than 90 days are marked stale and excluded from cheapest-nearby rankings. A stale price may still be right, but menu prices move, so it is labelled as old.
Who runs this
Sandwich Index is an independent project. It is not affiliated with, endorsed by, or sponsored by McDonald’s Corporation. “McDonald’s” and “McChicken” are trademarks of McDonald’s Corporation and are used here purely to describe the product being tracked.
Nothing on this site talks to a McDonald’s server. A feed’s prices are that feed’s own record; how it gathers them is stated beside its name above.