# Chipotle Locations Scraper (`datacach/chipotle-locations-scraper`) Actor

Scrape all Chipotle restaurant location URLs across the US from the public store locator sitemap. Export links for every store, no coordinates needed. Try it free.

- **URL**: https://apify.com/datacach/chipotle-locations-scraper.md
- **Developed by:** [DataCach](https://apify.com/datacach) (community)
- **Categories:** Automation, Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 1,000 links

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Chipotle Locations Scraper

**Extract every Chipotle restaurant page URL** in the US directly from Chipotle's public [store locator sitemap](https://locations.chipotle.com/sitemap.xml) — no browser, no login, no API key. This **Chipotle scraper** walks the sitemap index, filters out non-store pages, and returns one clean, deduplicated link per restaurant, ready to feed into further scraping, geocoding, or a metadata Actor.

Run it on demand or on a **schedule**, pull results through the **Apify API**, and connect it to **Zapier, Make, or n8n** for hands-off delivery of fresh Chipotle location data.

### What can Chipotle Locations Scraper do?

- 🌮 **Scrapes the full Chipotle store locator sitemap** — every US restaurant page URL, filtered to real store pages (ordering pages excluded).
- 🔗 **Deduplicates automatically** — each restaurant URL appears once, even if the sitemap changes between requests.
- 🎯 **Max results control** — collect a quick sample (default 50) or set `0` to pull the entire catalog (~4,000+ links).
- ⏭️ **Resumable pagination** — `startIndex` and `excludeUrls` let you pick up where a previous run left off without re-collecting (or re-paying for) links you already have.
- 🔁 **Crash-safe checkpointing** — a migrated or restarted run resumes from where it stopped instead of starting over.
- 📤 **Multiple export formats** — download results as **JSON, CSV, Excel, or HTML** straight from the Output tab.
- ☁️ **Built for the Apify platform** — schedule recurring runs, trigger via the **REST API**, monitor run history, and integrate with Zapier/Make/n8n webhooks.
- 🤝 **Pairs with the Chipotle Restaurant Metadata Actor** to turn these links into full store details (address, phone, geolocation, hours).

### What data does Chipotle Locations Scraper extract?

Each dataset item represents one Chipotle restaurant page link:

| Field | Description |
|---|---|
| `url` | Full URL of the Chipotle restaurant location page |
| `coordinate` | Source label identifying where the link was discovered (currently `static source`) |
| `extraction_datetime` | UTC timestamp (ISO 8601) when the link was collected |
| `extraction_date` | Extraction date in `mm-dd-yyyy` format |

### How do I use Chipotle Locations Scraper to scrape Chipotle store URLs?

1. Click **Try for free** or open the Actor and go to the **Input** tab.
2. Optionally set **Max results**, **Start index**, and/or **Exclude collected links** — see [Input](#input) below. The defaults work out of the box.
3. Click **Start** and wait for the run to finish.
4. Open the **Output** tab and export your Chipotle location links as **JSON, CSV, Excel, or HTML**.

### Input

The Actor accepts three optional inputs — you can also just click **Start** and use the defaults:

- **Max results** — the maximum number of unique restaurant links to collect in this run. Default is `50`. Set it to `0` to collect every Chipotle location in the sitemap (roughly 4,000+ links); since this Actor can be billed per result, raise it gradually rather than jumping straight to `0`.
- **Start index** — skips this many links from the start before saving any, letting you paginate across multiple runs (e.g. set `500` to continue after already collecting the first 500) without paying again for links you already have.
- **Exclude collected links** — a list of restaurant URLs you already have. Any link on this list is never saved again, regardless of order — useful when you keep a running list and only want new locations.

Free-plan runs are capped at 10 links per run, and **Start index** / **Exclude collected links** are disabled on the free plan to prevent bypassing that cap.

### Output example

```json
{
  "url": "https://locations.chipotle.com/al/birmingham/300-20th-st-s",
  "coordinate": "static source",
  "extraction_datetime": "2026-07-21T14:30:00.123456+00:00",
  "extraction_date": "07-21-2026"
}
```

You can download the dataset in various formats such as **JSON, HTML, CSV, or Excel**.

### Use cases

- **Build a Chipotle store directory** for a food-delivery, aggregator, or comparison app.
- **Feed restaurant URLs into a metadata scraper** (like the Chipotle Restaurant Metadata Actor) to pull addresses, phone numbers, hours, and geolocation for every store.
- **Track new Chipotle store openings** by scheduling recurring runs and comparing link counts over time.
- **Power location-based search or store-locator features** in an internal tool without hand-maintaining a URL list.
- **Feed a market-research or site-expansion dataset** with the full list of active Chipotle locations across the US.

### Chipotle-related Actors

| Actor | What it does |
|---|---|
| Chipotle Restaurant Metadata *(placeholder)* | Takes links from this Actor and extracts address, phone, geolocation, and hours for each store |

### FAQ

#### Is it legal to scrape Chipotle locations?

This Actor only collects **publicly available data** from Chipotle's public sitemap — the same URLs search engines index. It does not bypass logins, paywalls, or access any private data. That said, scraping is subject to the target site's Terms of Service; review Chipotle's terms and applicable law before using the extracted data commercially, and consult a legal professional if you're unsure.

#### Does this Actor extract store hours, phone numbers, or coordinates?

No — this Actor only collects restaurant **page URLs**. Pair it with the Chipotle Restaurant Metadata Actor to pull hours, phone numbers, addresses, and geolocation for each link.

#### What's the difference between the free and paid plan?

Free-plan runs are capped at **10 links**, and both **Start index** and **Exclude collected links** are disabled (forced to their defaults) so a free run can't bypass the cap by paginating across multiple runs.

#### Can I resume a run without paying twice for the same links?

Yes. If a run is interrupted (e.g. platform migration), it resumes from its checkpoint instead of starting over, so already-collected links aren't re-pushed. Across separate runs, use **Start index** and **Exclude collected links** to avoid re-collecting links you already have.

#### Is there an API for this Actor?

Yes — every Apify Actor run can be triggered and its results retrieved via the [Apify API](https://docs.apify.com/api/v2), so you can integrate this scraper into your own app, script, or automation (Zapier, Make, n8n) without touching the Apify Console.

#### What if the sitemap request gets blocked?

If Chipotle's sitemap blocks the request (anti-bot protection), the affected request is logged and the run fails gracefully rather than returning partial or corrupted data.

### Support

Found a bug or have a feature request? Open an issue on the Actor's **Issues** tab in Apify Console. Need a custom version of this scraper — different data fields, another region, or a fully managed pipeline? Reach out through the Actor's contact page for a custom solution.

# Actor input Schema

## `maxResults` (type: `integer`):

Maximum number of unique restaurant links to collect this run. Set <b>0</b> to collect every restaurant in the sitemap (roughly 4,000+ links) — this can take a while and, under pay-per-result pricing, may cost more than expected, so raise it gradually. Free plan is capped at 10 links regardless of this setting.

## `startIndex` (type: `integer`):

Skip this many links from the <b>start</b> before saving any. Use it to paginate across runs: if you already have the first 500, set <b>500</b> to begin from link 501 and avoid paying again for links you already have. Links are discovered in a stable order from the sitemap, so index N is reproducible between runs as long as Chipotle's sitemap ordering doesn't change. The Actor still crawls up to that point, so a large value does not make the run faster — it only changes which links are saved. Combined with <b>Max results</b>, the saved range is \[startIndex, startIndex + maxResults). Ignored on the free plan (always starts from 0).

## `excludeUrls` (type: `array`):

Restaurant links you already have, e.g. <code>https://locations.chipotle.com/al/birmingham/300-20th-st-s</code>. Any URL listed here is <b>never saved again</b>, regardless of order. Unlike <b>Start index</b>, this is order-independent — ideal when you keep a running list and only want new links. Applied after Start index. Free plan runs may list at most 1 URL here.

## Actor input object example

```json
{
  "maxResults": 50,
  "startIndex": 0,
  "excludeUrls": [
    "https://locations.chipotle.com/al/birmingham/300-20th-st-s"
  ]
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxResults": 50,
    "excludeUrls": [
        "https://locations.chipotle.com/al/birmingham/300-20th-st-s"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("datacach/chipotle-locations-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "maxResults": 50,
    "excludeUrls": ["https://locations.chipotle.com/al/birmingham/300-20th-st-s"],
}

# Run the Actor and wait for it to finish
run = client.actor("datacach/chipotle-locations-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxResults": 50,
  "excludeUrls": [
    "https://locations.chipotle.com/al/birmingham/300-20th-st-s"
  ]
}' |
apify call datacach/chipotle-locations-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=datacach/chipotle-locations-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/GAr3vzUOIaykraJBT/builds/0gcygQUVwfvNrHHkV/openapi.json
