Store locator and footprint mapping
Use Jimmy John's endpoints to turn store locator and footprint mapping into repeatable API requests with documented inputs and JSON responses.
Turn Jimmy John's public store and menu data into structured JSON — a sitemap-declared index of 9,700+ store URLs across three page variants per restaurant, coordinate proximity search against Jimmy John's own Olo-backed ordering API, per-store detail, each restaurant's full menu as a category tree, and every product's customization tree down to per-ingredient extra/regular/light/none choices. Credential-free.
Enumerate Jimmy John's 9,700+ store-URL index, find restaurants by coordinate, and get store detail plus full menus and customization trees as JSON.
Endpoint families
5
Documented params
16
Examples
5
Live catalog snapshot
Active endpoints
5
Methods
GET
Required params
10
Schema refs
5
{
"platform": "Jimmy John's",
"endpoint": "jimmy-johns-nearby",
"method": "GET",
"path": "/jimmy-johns/nearby",
"auth": "apiKey"
}Use cases
Enumerate Jimmy John's 9,700+ store-URL index, find restaurants by coordinate, and get store detail plus full menus and customization trees as JSON.
Use Jimmy John's endpoints to turn store locator and footprint mapping into repeatable API requests with documented inputs and JSON responses.
Use Jimmy John's endpoints to turn menu and customization monitoring into repeatable API requests with documented inputs and JSON responses.
Use Jimmy John's endpoints to turn local retail presence monitoring into repeatable API requests with documented inputs and JSON responses.
Managed execution
Every figure below is read from the live Jimmy John's endpoint catalog — 5 endpoints, 16 documented request parameters, and 5 published response schemas — the same catalog Docs and Playground run against.
5 documented Jimmy John's endpoints, grouped into 5 request families — Menu, Modifiers and Nearby, plus 2 more.
16 request parameters are documented across those Jimmy John's endpoints, 10 of them required — the full input contract is public before you write any integration code.
5 of the 5 Jimmy John's endpoints ship a recorded example response, and 5 carry a documented response schema — you can code against the real JSON before the first request.
Jimmy John's endpoints document their error responses (400, 404, 429 and 503) alongside the success schema, so a block, a rate limit, or a missing record comes back as a typed error rather than silently empty data.
5 hosted MCP tools back the Jimmy John's endpoints, so an agent can call the same routes with the same parameters and the same JSON contract, with no custom glue.
Coverage map
These cards are generated from the active endpoint catalog, so the landing page reflects the same API surface used by Docs and Playground.
/jimmy-johns/menu
/jimmy-johns/modifiers
/jimmy-johns/nearby
/jimmy-johns/sitemap
/jimmy-johns/store
Endpoint catalog
/jimmy-johns/nearbyReturns Jimmy John's restaurants within a radius of a coordinate, nearest first, using Jimmy John's own Olo-backed ordering API (a separate host from the locator this family's sitemap and store endpoints read). Each result carries restaurant_id -- pass it to GET /jimmy-johns/menu for that restaurant's full menu. The upstream's own radius parameter does not narrow its result set, so distance filtering and sorting happen here.
MCP tool jimmy_johns_nearby
/jimmy-johns/sitemapReturns one page of Jimmy John's sitemap-declared store index -- 9,700+ URLs at time of writing. Jimmy John's publishes three page variants per store (sandwiches, delivery, catering) and all three appear in the sitemap, so each entry carries a kind and the store number they share; filter with the kind parameter to enumerate one variant per restaurant. `sandwiches` is the canonical variant. A page past the end returns an empty list rather than an error, so a caller can walk to exhaustion.
MCP tool jimmy_johns_sitemap
/jimmy-johns/storeReturns one Jimmy John's store: name, postal address, phone, coordinates, cuisine description and the published week of opening hours. Store paths come from GET /jimmy-johns/sitemap. Note Jimmy John's main site is behind a bot challenge that serves a page with HTTP 200, so this family reads the separate locator subdomain instead. For menu data, see GET /jimmy-johns/nearby and GET /jimmy-johns/menu, which read a separate ordering API.
MCP tool jimmy_johns_store
/jimmy-johns/menuReturns one Jimmy John's restaurant's full menu as a category tree: every category and its products, with name, description, calorie range, base cost and image. restaurant_id comes from GET /jimmy-johns/nearby. Many sandwiches price entirely through a size selection rather than a base cost, so cost is commonly 0 for those items -- see GET /jimmy-johns/modifiers for the real per-size price.
Response notes
- Many sandwiches price entirely through a size selection rather than a base cost, so `cost` is `0` for those items — see `/jimmy-johns/modifiers` for the real per-size price. Combos and flat-priced items (cookies, drinks) carry a real `cost`. - `base_calories` and `max_calories` bound the calorie range across an item's size/customization options and arrive as strings (e.g. Jimmy John's own site renders `370-650` with a separator), so they are not coerced to a number here. - `chain_product_id` identifies an item across every Jimmy John's restaurant; `product_id` is specific to this restaurant's own menu. - A `restaurant_id` with no active menu returns a 404. Example response: ```json {"code":200,"msg":"OK","data":{"restaurant_id":67182,"categories":[{"category_id":69933,"name":"Originals","products":[{"product_id":33276056,"chain_product_id":353441,"name":"#1 The Pepe®","description":"HAM, PROVOLONE, lettuce, tomato & mayo","cost":0,"base_calories":"370","max_calories":"650","image_url":"https://olo-images-live.imgix.net/49/497e4a5114b6455fa74aa9b808dbe499.png"}]}],"category_count":20,"product_count":180,"source_url":"https://jj.ordering.api.olo.com/v1.1/restaurants/67182/menu","fetched_at":"2026-09-02T00:00:00Z"}} ```
MCP tool jimmy_johns_menu
/jimmy-johns/modifiersReturns one menu product's full customization tree: size, bread, and per-ingredient choices (extra/regular/light/none), each with its real price and calorie delta. Groups nest -- picking a size choice can reveal a bread group, which can reveal one group per ingredient -- so a size step, a bread step, and every "Customize Sandwich" ingredient all live in one recursive tree. product_id comes from GET /jimmy-johns/menu.
Response notes
- Groups nest recursively through a choice's `groups`: picking a size choice can reveal a bread group, and picking "Customize Sandwich" reveals one group per ingredient (bread, ham, cheese, lettuce, etc.). A sandwich's real per-size price lives here — under "Choose Your Size" — not in `/jimmy-johns/menu`'s `cost` field. - `cost` is a price delta relative to the parent choice, not an absolute price. Most ingredient choices are free (the included default); an "Xtra" choice carries a positive cost, and a "No" choice is usually `0` with a negative `base_calories`. - `base_calories` can be negative for a "light"/"no" ingredient choice, reflecting the calorie reduction from the default. - `min_selects`/`max_selects` are omitted when the upstream places no explicit limit beyond `mandatory`. Example response: ```json {"code":200,"msg":"OK","data":{"product_id":33276056,"groups":[{"group_id":1176353985,"name":"Make it a Combo!","mandatory":true,"choices":[{"option_id":5265915593,"name":"No","cost":0,"is_default":true,"groups":[{"group_id":1176354037,"name":"Choose Your Size","mandatory":true,"choices":[{"option_id":5265915696,"chain_option_id":2476875,"name":"REGULAR","cost":8.69,"is_default":true,"groups":[{"group_id":1176355033,"name":"Smoked Ham","mandatory":true,"choices":[{"option_id":5265919605,"name":"Xtra Smoked Ham","cost":2.29,"base_calories":"70"},{"option_id":5265919606,"name":"Reg Smoked Ham","cost":0,"is_default":true},{"option_id":5265919608,"name":"No Smoked Ham","cost":0,"base_calories":"-70"}]}]}]}]}]}],"group_count":1,"source_url":"https://jj.ordering.api.olo.com/v1.1/products/33276056/modifiers","fetched_at":"2026-09-03T00:00:00Z"}} ```
MCP tool jimmy_johns_modifiers
Related APIs
Marketplaces & Retail
Collect marketplace product signals from Amazon without building brittle storefront scrapers.
Marketplaces & Retail
Build resale, pricing, and marketplace workflows from structured eBay data.
Marketplaces & Retail
Turn public Shop.app product and merchant pages into structured JSON for e-commerce product intelligence, price research, shop monitoring, and marketplace discovery workflows.
How to scrape Jimmy John's
Crawlora's Jimmy John's endpoints return normalized public Jimmy John's data as JSON with one API key — no Jimmy John's account required. Two different upstreams back this family: the public locator (sitemap/store) and Jimmy John's own Olo-backed ordering API (nearby/menu/modifiers).
Call /jimmy-johns/sitemap to page through Jimmy John's sitemap-declared store index — 9,700+ URLs at time of writing. Jimmy John's publishes three page variants per store and all three appear, so each entry carries a kind plus the store_number they share; filter on kind to get one row per restaurant (sandwiches is the canonical variant).
Pass a latitude and longitude to /jimmy-johns/nearby for restaurants nearest first, read from Jimmy John's own Olo-backed ordering API rather than the locator. Each result carries a restaurant_id — the id /jimmy-johns/menu needs.
Pass a store path from /jimmy-johns/sitemap to /jimmy-johns/store for that location's published detail.
Pass a restaurant_id from /jimmy-johns/nearby to /jimmy-johns/menu for that restaurant's full menu as a category tree, then a product_id from it to /jimmy-johns/modifiers for that product's complete customization tree — size, bread, and per-ingredient extra/regular/light/none choices.
FAQ
Call /jimmy-johns/nearby with a coordinate or /jimmy-johns/sitemap to enumerate the store index, /jimmy-johns/store for one store's detail, then /jimmy-johns/menu and /jimmy-johns/modifiers for a restaurant's menu and customization options — all return structured JSON with one API key.
Jimmy John's publishes three page variants per restaurant and all three appear in its own sitemap. Each /jimmy-johns/sitemap entry carries a kind and the store_number the variants share — filter on kind to enumerate one row per restaurant; sandwiches is the canonical variant.
restaurant_id, which comes from /jimmy-johns/nearby (the Olo-backed ordering API), not the store_number or path the sitemap and store endpoints use — those read the public locator, a different upstream.
Yes — /jimmy-johns/modifiers returns one product's full customization tree, including size, bread, and each ingredient's extra/regular/light/none choices.