Square Online Menu Scraper
Pricing
Pay per event
Square Online Menu Scraper
🍽️ Export public Square Online menus with exact prices, categories, locations, images, availability, variations, SKUs, and modifier choices.
Pricing
Pay per event
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
Extract structured restaurant menus from public Square Online sites.
Square Online Menu Scraper turns *.square.site ordering pages into clean records containing menu items, categories, exact prices, images, locations, availability, variations, SKUs, and modifiers.
It reads Square's public catalog data directly, so you get source-native IDs and price subunits instead of OCR guesses or brittle page text.
What does Square Online Menu Scraper do?
Give the Actor one or more public Square Online merchant URLs.
It discovers the merchant's current catalog configuration, finds every public store location, paginates the menu, and saves one product-location record per dataset row.
Use it to:
- 🍽️ export complete Square restaurant menus;
- 💵 monitor prices and sale state;
- 🚫 track sold-out or unavailable products;
- 🔄 migrate catalogs into another ordering system;
- 🧩 capture variation and modifier choices;
- 📊 build restaurant and food-tech datasets.
Why use a source-specific Square menu scraper?
General menu scrapers must handle arbitrary HTML, PDFs, and images.
That flexibility often means OCR, AI interpretation, missing identifiers, or uncertain prices.
This Actor focuses on Square Online's public structured catalog.
The result includes exact product IDs, location IDs, integer price subunits, SKU variations, inventory flags, and modifier choices that are useful in production workflows.
Who is it for?
Restaurant-data vendors
Collect normalized menu snapshots for analytics, enrichment, and delivery applications.
Catalog migration teams
Map source product IDs, categories, variations, and modifiers into a new POS or storefront.
Food-tech developers
Feed structured Square menu records into search, recommendation, ordering, or comparison products.
Market researchers
Compare product mix, categories, prices, and availability across public merchants.
Price and availability monitors
Schedule repeat runs and compare stable IDs and timestamps between snapshots.
What data can you extract?
| Field group | Examples |
|---|---|
| Merchant | name, merchant ID, site URL, currency |
| Location | location ID, display name, address |
| Product | product ID, name, description, type, URL |
| Categories | category IDs and category names |
| Prices | low/high numeric, formatted, and subunit values |
| Availability | sold out, fulfillable, inventory enabled, total |
| Media | primary image and all image URLs |
| Variations | SKU ID, name, SKU, exact price, sold-out state |
| Modifiers | groups, min/max selections, choices, add-on prices |
| Freshness | Square update timestamp and scrape timestamp |
Input
The main input is startUrls.
Each URL must be a public Square Online host ending in .square.site.
{"startUrls": [{ "url": "https://alpha-coffee-107652.square.site/" }],"maxItems": 10,"includeDetails": true,"includeUnavailable": true}
Input fields
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | required | Public Square Online merchant URLs |
maxItems | integer | 10 | Combined result limit across sites and locations |
includeDetails | boolean | true | Fetch variations, SKUs, and modifiers |
includeUnavailable | boolean | true | Keep sold-out and unavailable products |
locationIds | string array | all | Restrict extraction to known Square locations |
How to scrape a Square Online menu
- Open the public Square Online ordering site.
- Copy its
https://...square.site/URL. - Add the URL under Square Online merchant URLs.
- Keep
maxItemssmall for your first run. - Enable details when you need sizes or modifier choices.
- Click Start.
- Export the dataset as JSON, CSV, Excel, XML, or another supported format.
Scrape one Square location
Merchants may expose more than one public pickup location.
To target one location, pass its Square location ID:
{"startUrls": [{ "url": "https://alpha-coffee-107652.square.site/" }],"locationIds": ["L7C77T70MZ0Y8"],"maxItems": 100}
The Actor fails clearly when none of the requested IDs exists on the site.
Output example
{"merchantName": "Alpha Coffee","merchantId": "MLJG3BW9G97XD","merchantUrl": "https://alpha-coffee-107652.square.site/","currency": "USD","locationId": "L7C77T70MZ0Y8","locationName": "Alpha Coffee Cafe","productId": "2MIV2LR5OPDTJC5RKLSZWBG3","productName": "Dirty Chai Frappe","categoryNames": ["Frappes"],"priceLow": 6.75,"priceHigh": 7.75,"priceLowSubunits": 675,"priceHighSubunits": 775,"soldOut": false,"onSale": true,"variations": [],"modifiers": [],"productUrl": "https://alpha-coffee-107652.square.site/product/...","scrapedAt": "2026-07-16T00:00:00.000Z"}
Optional properties are omitted when Square does not expose them.
Arrays are always present, which makes downstream processing predictable.
Variations, SKUs, and modifiers
Set includeDetails to true to request product detail and SKU routes.
Variations can include:
- variation or SKU ID;
- display name such as size;
- merchant SKU when present;
- numeric, formatted, and subunit prices;
- sold-out and inventory state.
Modifier groups include visible choices, add-on prices, selection limits, defaults, and sold-out state where Square exposes them.
Set details to false for faster lightweight item and price snapshots.
Price and availability monitoring
Use Apify Schedules to run the Actor hourly, daily, or weekly.
Keep includeUnavailable enabled so disappeared availability is visible as data rather than silently filtered.
Recommended comparison keys are:
merchantId;locationId;productId;- variation
id; - modifier choice
id.
Compare price subunits rather than formatted strings when calculating changes.
How much does it cost to scrape Square Online menus?
The Actor uses pay-per-event pricing.
A small one-time start event covers initialization, and each saved menu item is charged as an item event.
Account tiers receive decreasing per-item rates.
Your exact maximum charge is visible in Apify Console before and during the run.
Use maxItems to set a deterministic extraction ceiling.
Because the Actor uses public HTTP catalog routes rather than a full browser or OCR pipeline, runs are designed to remain lightweight.
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/square-online-menu-scraper').call({startUrls: [{ url: 'https://alpha-coffee-107652.square.site/' }],maxItems: 50,includeDetails: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
API usage with Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('automation-lab/square-online-menu-scraper').call(run_input={'startUrls': [{'url': 'https://alpha-coffee-107652.square.site/'}],'maxItems': 50,'includeDetails': True,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
API usage with cURL
curl -X POST \'https://api.apify.com/v2/acts/automation-lab~square-online-menu-scraper/runs?token=YOUR_APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"startUrls": [{"url": "https://alpha-coffee-107652.square.site/"}],"maxItems": 50,"includeDetails": true}'
Fetch results from the run's default dataset after it succeeds.
MCP integration
Use the Actor through Apify's MCP server from Claude Code, Claude Desktop, Cursor, or VS Code.
Claude Code setup
$claude mcp add --transport http apify 'https://mcp.apify.com/?tools=automation-lab/square-online-menu-scraper'
Claude Desktop and Cursor setup
Add this configuration under mcpServers in Claude Desktop or Cursor and provide your Apify token through the client authentication flow:
{"mcpServers": {"apify-square-menu": {"type": "http","url": "https://mcp.apify.com/?tools=automation-lab/square-online-menu-scraper"}}}
VS Code setup
Add the same HTTP MCP URL through MCP: Add Server, name it apify-square-menu, and authenticate with your Apify account.
Example prompts:
- “Scrape the first 50 items from this Square Online restaurant menu.”
- “Return sold-out products and all variation prices for this Square site.”
- “Extract this merchant's modifier choices for catalog migration.”
Integrations
Google Sheets and Excel
Export scheduled snapshots for analysts and operations teams.
Webhooks
Trigger an ETL job when a menu run succeeds.
Make and Zapier
Send new or changed products into no-code workflows.
Cloud storage and databases
Use dataset APIs to load records into BigQuery, Snowflake, PostgreSQL, or an object store.
AI assistants
Connect through MCP and ask for category, price, or availability summaries grounded in current public catalog data.
Tips for reliable runs
- Use the merchant's public home or order-online URL.
- Keep the hostname ending in
.square.site. - Start with
maxItems: 10to inspect the shape. - Disable details when only names, categories, and price ranges are needed.
- Use location IDs to prevent intentional duplicate products across branches.
- Store product and location IDs for stable comparisons.
- Schedule complete snapshots at a cadence appropriate for the merchant.
Limitations
The Actor supports public *.square.site merchant sites.
It does not log into Square Dashboard, access private seller data, place orders, or use a seller's official OAuth catalog.
A merchant can remove products, disable ordering, restrict a location, or unpublish a site at any time.
Square may change its public frontend or catalog API.
The Actor discovers live merchant identifiers and cache versions to reduce dependence on hard-coded values, but upstream changes can still require maintenance.
Category names come from the public site bootstrap; unknown category IDs remain available in categoryIds.
Troubleshooting
“Unsupported host”
Provide the public Square Online URL, not a Square Dashboard, checkout, social, or custom-domain URL.
“Bootstrap state was not found”
Confirm the page opens publicly and is a current Square Online site.
Try the merchant homepage instead of a deep checkout link.
No matching locations
Remove locationIds to list data from every public location, or verify the IDs from an earlier run.
Fewer items than expected
Increase maxItems, enable unavailable products, and check whether the merchant has multiple locations.
Run fails after a Square site change
Inspect the run log and report the public URL through the Actor's issue form so the extraction route can be updated.
Is scraping Square Online legal?
This Actor extracts information already exposed on public merchant pages and anonymous catalog endpoints.
Scraping legality depends on your jurisdiction, purpose, data type, and contractual obligations.
Do not use the Actor to collect private information, bypass access controls, overload a site, or violate applicable laws and terms.
You are responsible for your input URLs, retention policy, and downstream use.
When in doubt, consult qualified legal counsel.
FAQ
Does it require a Square login or API key?
No. It reads the public menu surface visible to ordinary visitors.
Does it use OCR or AI to guess prices?
No. Prices and IDs come from Square's structured public catalog response.
Can it scrape several merchants in one run?
Yes. Add several Square Online URLs and set a combined maxItems limit.
Can it return sold-out products?
Yes. includeUnavailable defaults to true.
Can it return modifiers and size variations?
Yes. Keep includeDetails enabled.
Why can the same product appear more than once?
Rows are product-location records. The same product may intentionally be offered at several merchant locations.
Can it scrape custom domains powered by Square?
The current product contract accepts *.square.site URLs so scope is explicit and validation fails closed.
Related scrapers
Combine this Actor with other Automation Lab actors when you need a broader restaurant-data workflow:
- Grubhub Restaurant Menus Scraper for Grubhub-specific restaurant and menu data.
- Google Maps Scraper for restaurant discovery and business profiles.
Use this Actor when your source of truth is a public Square Online merchant catalog.
Support
If a valid public Square Online site stops working, open an issue from the Actor page.
Include:
- the public merchant URL;
- whether the page opens in a normal browser;
- the expected product or location;
- a run ID when available.
Do not include private Square credentials or customer data.
Start extracting Square menus
Add a public *.square.site URL, keep the first run small, and inspect the structured dataset.
Then scale the result limit, target locations, schedule snapshots, or connect the Actor to your existing data pipeline.