Domino's Menus Scraper
Pricing
from $3.60 / 1,000 item extracteds
Domino's Menus Scraper
Find US Domino's stores and export current menus, item sizes, prices, availability, coupons, and ordering provenance by ZIP code or store ID.
Pricing
from $3.60 / 1,000 item extracteds
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Export current US Domino's menus for selected ZIP codes or store IDs. The Actor returns store metadata, service availability, menu categories, products, priced sizes, coupons, and source provenance as analysis-ready dataset rows.
Use it for recurring restaurant catalog monitoring, local price comparisons, market coverage analysis, and spreadsheet or data-pipeline exports.
What does Domino's Menus Scraper do?
The Actor follows Domino's public ordering data flow without placing an order. It can:
- discover nearby US stores from one or more five-digit ZIP codes;
- fetch a known store directly from its numeric Domino's store ID;
- report delivery and carryout support and current service-open flags;
- normalize each priced product variant as one menu-item row;
- attach product category, product family, size, price, and availability;
- export current public coupon names, codes, prices, and service methods;
- preserve the exact Domino's API URL used as record provenance;
- stop predictably at configured store and output-record limits.
The Actor is read-only. It does not add products to a cart, validate coupons, submit customer information, or place orders.
Who is it for?
Restaurant intelligence teams can compare visible prices and assortment between stores and markets.
Data analysts can build a repeatable ZIP-to-store-to-menu dataset instead of manually browsing ordering pages.
Retail and delivery researchers can observe service availability, local coupons, and menu differences across selected US locations.
Developers can consume stable typed JSON through the Apify API, SDKs, webhooks, schedules, Make, Zapier, or MCP.
Why use this Actor?
A Domino's menu is store-specific. A national list alone does not answer which
variant is offered, what a selected store charges, or which coupons are visible.
This Actor resolves the store first and keeps storeId on every result.
Compared with a browser-only workflow, its structured HTTP route avoids loading images, fonts, videos, and analytics. That reduces memory and transfer while preserving public catalog fields. A US residential proxy is still required by the source and is configured automatically.
What data can I extract?
| Record | Important fields | Meaning |
|---|---|---|
| Store | storeId, address, phone, hoursDescription | Public store identity and contact context |
| Service | allowsDelivery, allowsCarryout, serviceIsOpen | Ordering capability and observed open state |
| Wait | estimatedWaitMinutes | Current service-method wait estimate when supplied |
| Menu item | productCode, variantCode, name, productName | Product family and purchasable variant identity |
| Category | productType, category, categoryPath | Menu organization returned by Domino's |
| Size | sizeCode, sizeName, sizeDescription | Size or quantity represented by the variant |
| Price | price, currency | Current listed base price; nullable when not fixed |
| Availability | available, local | Prepared/not-excluded state and store-local marker |
| Coupon | couponCode, name, price, bundle | Public store coupon metadata |
| Provenance | sourceUrl, orderingUrl, scrapedAt | Source endpoint, ordering entry point, and collection time |
Store, menu-item, and coupon entities share the default dataset. Use
recordType to filter or split them downstream.
Getting started
- Open the Actor input page.
- Keep the example ZIP code or enter your own five-digit US ZIP codes.
- Optionally add known numeric Domino's store IDs.
- Select
store,menuItem, and/orcouponrecord types. - Set
maxStoresandmaxItemsto bound the run. - Choose the service method used for ZIP discovery.
- Click Start.
- Open the default dataset to preview, download, or integrate the rows.
Start with one ZIP, one store, and 25–100 records while validating a workflow. Increase limits only after confirming that the selected markets meet your needs.
Input parameters
postalCodes
Array of five-digit US ZIP codes.
The Actor finds stores visible for the selected serviceMethod.
Example: ["10001", "90210"].
storeIds
Optional numeric Domino's store IDs.
This route is useful for recurring checks after a first discovery run.
Example: ["3681"].
serviceMethod
Delivery or Carryout.
This affects store discovery; it does not filter menu variants or coupon rows.
recordTypes
Any combination of:
store— store and service metadata;menuItem— one row per menu variant/size;coupon— one row per public coupon.
maxStores
Maximum unique stores processed across all inputs. Allowed range: 1–25. Default: 1.
maxItems
Maximum total dataset rows across all record types. Allowed range: 1–10,000. Default: 20.
When several stores are selected, the Actor allocates the remaining result budget across them so one large menu does not starve later stores.
Example input: one ZIP menu sample
{"postalCodes": ["10001"],"recordTypes": ["store", "menuItem"],"maxStores": 1,"maxItems": 25}
This exact input currently returns one store row and 24 priced menu-item rows. Source data changes naturally over time.
Example input: one store's coupons
{"postalCodes": [],"storeIds": ["3681"],"recordTypes": ["coupon"],"maxStores": 1,"maxItems": 30}
Use a store-specific task or schedule when you need repeatable snapshots for the same location.
Example output
A real normalized menu-item row has this shape:
{"recordType": "menuItem","storeId": "3681","productCode": "F_PBITES","variantCode": "B16PBIT","name": "16-Piece Parmesan Bread Bites","productName": "Parmesan Bread Bites","productType": "Bread","category": "Breads","categoryPath": ["Breads"],"sizeCode": "BRD16","sizeName": "16-Piece","price": 6.49,"currency": "USD","available": true,"local": false,"sourceUrl": "https://order.dominos.com/power/store/3681/menu?lang=en&structured=true","orderingUrl": "https://www.dominos.com/en/pages/order/menu","scrapedAt": "2026-09-12T20:15:58.237Z"}
Prices shown above are source data, not Actor charges. They may change whenever the store updates its catalog.
How much does it cost to scrape Domino's menus?
Pay-per-event pricing has two parts:
- Start: $0.05 once per run.
- Item: one charge for each dataset record actually produced.
The BRONZE item price is $0.006 per record. Tier discounts are applied automatically by Apify:
| Tier | Price per record |
|---|---|
| FREE | $0.0069 |
| BRONZE | $0.006 |
| SILVER | $0.00468 |
| GOLD | $0.0036 |
| PLATINUM | $0.0036 |
| DIAMOND | $0.0036 |
Examples at BRONZE pricing:
- 25 records: $0.05 + (25 × $0.006) = $0.20;
- 100 records: $0.05 + (100 × $0.006) = $0.65;
- 500 records: $0.05 + (500 × $0.006) = $3.05.
Only accepted dataset rows trigger item events. Failed requests, rejected values, and duplicates are not item-charged. Platform compute and proxy usage are accounted for in the maintained price and may vary with retries, but users pay the active Actor events shown by Apify.
Recurring price and catalog monitoring
For recurring monitoring:
- run ZIP discovery once and retain the returned store IDs;
- create a Task using those
storeIds; - select the record types your pipeline needs;
- schedule the Task daily, weekly, or monthly;
- export each dataset with
storeId, variant/coupon code, andscrapedAt; - compare snapshots in your warehouse or spreadsheet.
The Actor reports observations; it does not maintain historical state or send change alerts itself.
Spreadsheet and data-pipeline exports
The default dataset can be downloaded as JSON, CSV, Excel, XML, RSS, or JSONL.
For clean menu-price tables, filter recordType = menuItem.
For location coverage, filter recordType = store.
For promotions, filter recordType = coupon.
Useful comparison keys are:
- store menu:
storeId + variantCode; - product family:
storeId + productCode; - coupon:
storeId + couponCode; - observation time:
scrapedAt.
API usage with cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~dominos-store-menus-pricing/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"postalCodes":["10001"],"recordTypes":["store","menuItem"],"maxStores":1,"maxItems":25}'
Use the returned run's defaultDatasetId to fetch dataset items.
Do not embed an Apify token in public source code.
API usage with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/dominos-store-menus-pricing').call({postalCodes: ['10001'],recordTypes: ['store', 'menuItem'],maxStores: 1,maxItems: 25,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
API usage with Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/dominos-store-menus-pricing').call(run_input={'postalCodes': ['10001'],'recordTypes': ['store', 'menuItem'],'maxStores': 1,'maxItems': 25,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
MCP setup
Add the Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/dominos-store-menus-pricing"
Claude Desktop, Cursor, and VS Code setup
Claude Desktop, Cursor, and VS Code can use this equivalent MCP configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/dominos-store-menus-pricing"}}}
Example prompts:
- “Find one Domino's store near ZIP 10001 and return 25 current menu rows.”
- “Export current coupons for Domino's store 3681.”
- “Compare menu prices for two stores and group changes by variant code.”
Reliability and retry behavior
Domino's protects its public ordering endpoints with geographic and anti-bot controls. Direct and datacenter delivery did not provide reliable data during development. The Actor therefore uses a US residential Apify Proxy connection.
Each endpoint receives at most three attempts. A retry rotates to a fresh sticky residential identity after a network error, HTTP 403, HTTP 429, or temporary server error. Stable invalid-input and other non-transient responses fail without blind retries.
If all attempts fail, the Actor exits non-zero instead of returning a misleading successful empty dataset.
Limits and interpretation
- Coverage is limited to US stores visible through Domino's public endpoints.
- ZIP search returns nearby stores selected by Domino's, not every store in a state.
maxStoresis capped at 25 to bound transfer, runtime, and proxy cost.- A price is the listed base value and may exclude tax, fees, toppings, or cart rules.
- A coupon row describes public catalog metadata; it is not proof of cart eligibility.
availablereflects structured menu flags, not guaranteed physical inventory.- Service-open and wait estimates are time-sensitive snapshots.
- Empty or absent upstream optional fields remain omitted or null.
- The source can change endpoint behavior or schema without notice.
Legality and responsible use
Use public data responsibly and only for lawful purposes. Review Domino's terms, applicable database rights, and local laws for your use case. Keep request volumes proportionate, use bounded schedules, and avoid collecting unnecessary personal data.
This Actor is not affiliated with, endorsed by, or sponsored by Domino's. Domino's names and trademarks belong to their respective owners.
Troubleshooting
“Provide at least one postalCodes or storeIds value”
Add at least one five-digit US ZIP or numeric store ID. An empty input is rejected deliberately.
“Every postal code must contain exactly 5 digits”
Use strings such as "10001".
Do not include ZIP+4 suffixes, country prefixes, or city names.
The run fails after three residential sessions
Inspect the run log for HTTP status and endpoint context. Try a smaller one-store input later rather than immediately launching repeated large runs. Persistent upstream protection changes require an Actor update.
I received fewer rows than expected
Check maxItems, maxStores, and recordTypes.
A selected limit can truncate the source catalog intentionally.
Some stores also expose fewer coupons or variants than others.
Why is a coupon price null?
Some public coupons represent percentage discounts or cart rules without a single fixed dollar value. The Actor preserves null instead of inventing one.
FAQ
Does this Actor place Domino's orders?
No. It performs read-only catalog and store lookups.
Can I search by city or street address?
Not in this version. Use five-digit US ZIP codes or known numeric store IDs. This avoids pretending that partial addresses have deterministic coverage.
Are menu prices current?
They are current as returned by the selected store at scrapedAt.
The Actor does not guarantee how quickly a store publishes operational changes.
Can I monitor historical changes?
Yes, by scheduling a Task and comparing successive datasets externally. The Actor does not combine snapshots or issue alerts itself.
Are coupons guaranteed to work?
No. Coupon availability and eligibility can depend on service method, cart, time, location, and terms not represented by a fixed row.
Why are store and coupon rows charged like menu rows?
Every useful dataset record uses the single item event.
There are no hidden record-type events and no separate coupon charge.
Related Automation Lab Actors
For broader restaurant-market coverage, use Uber Eats Menus & Reviews Scraper to complement source-specific Domino's catalog observations with marketplace restaurant, menu, price, and review data.
Choose this Actor when Domino's store-level product variants, sizes, prices, service state, coupons, and source provenance are the required output.