# Petco Store Links Scraper (`datacach/petco-store-links-scraper`) Actor

Extract every Petco store page URL across the US from the public store locator sitemap. Deduplicated links dataset, ready for lead-gen, mapping, or feeding a store-details scraper. No coding required.

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

## Pricing

from $0.50 / 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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## Petco Store Links Scraper

**Extract every Petco store page URL in the US** with a single click — no coding, no CSS selectors, no start URLs to hunt down. Just run the Actor and download a clean, deduplicated **JSON, CSV, or Excel** dataset of Petco store links, ready to plug into a mapping tool, lead-gen list, CRM, or a second Actor that pulls full store details.

### What is Petco Store Links Scraper?

Petco Store Links Scraper is an [Apify Actor](https://apify.com) that **collects the store page URL of every Petco pet supply location in the United States**. It needs no input to get started — no addresses, no coordinates, no search terms — and returns a deduplicated list of store links you can filter, cap, or paginate across runs. It's built for anyone who needs a **complete, up-to-date directory of Petco store URLs** without manually browsing the store locator page by page.

### What can Petco Store Links Scraper do?

- 🔗 **Extract every Petco store URL** in the US in one run, deduplicated automatically
- 🎯 **Cap results** with `maxResults`, or run unlimited to get every store link
- ⏭️ **Paginate across runs** with `startIndex` so you never pay twice for links you already collected
- 🚫 **Exclude specific URLs** you already have, regardless of run order
- 🕒 **Timestamped output** — every link is stamped with the exact extraction date and time
- 📤 **Export to JSON, CSV, Excel, or HTML** straight from the Output tab
- ⏰ **Schedule recurring runs** on Apify to keep your store list fresh automatically
- 🔌 **Full API access** — trigger runs, fetch results, and integrate with Zapier, Make, or your own backend
- 📊 **Built-in monitoring** — track run history, success rate, and dataset growth from the Apify Console

### What data does Petco Store Links Scraper extract?

| Field | Description | Example |
|---|---|---|
| `url` | The Petco store's page URL | `https://stores.petco.com/ak/anchorage/pet-supplies-anchorage-ak-1215.html` |
| `coordinate` | Internal source label for the link (always `static source` — no location input is required to run this Actor) | `static source` |
| `extraction_datetime` | UTC timestamp of when the link was collected (ISO 8601) | `2026-07-21T14:30:00.123456+00:00` |
| `extraction_date` | Extraction date in `mm-dd-yyyy` format | `07-21-2026` |

Need more than the URL — address, phone number, geolocation, opening hours? Pair this Actor with **[Petco Store Details Scraper](https://apify.com/datacach/petco-store-details-scraper)** (see [below](#petco-store-details-scraper-get-full-store-details)), which takes these links and extracts the full store record for each one.

### How do I scrape Petco store URLs?

1. Open the Actor's **Input** tab in Apify Console.
2. Leave everything at the defaults for a small first run, or set `maxResults` to `0` to collect every store link in the US.
3. If you already have some links from a previous run, set `startIndex` and/or `excludeUrls` so you don't collect (and pay for) the same links twice.
4. Click **Start**.
5. Once the run finishes, open the **Output** tab and download your dataset as JSON, CSV, Excel, or HTML — or pull it programmatically via the [Apify API](https://docs.apify.com/api/v2).

<!-- TODO: embed a demo GIF or YouTube video walking through Input -> Start -> Output -->

### Input

<!-- TODO: screenshot of the Input tab form -->

All inputs are optional — you can run the Actor with no configuration at all. The Input tab lets you set:

- **Max results** — the maximum number of store links to collect. Defaults to a small sample run; set it to `0` to collect every Petco store link in the US.
- **Start index** — skip the first N results by position, useful for paginating a large collection across multiple runs without re-collecting (and re-paying for) links you already have.
- **Already Collected URLs** — a list of store URLs you already have. Any URL on this list is never saved again, no matter where it appears in the results.

### Output example

```json
{
  "url": "https://stores.petco.com/ak/anchorage/pet-supplies-anchorage-ak-1215.html",
  "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** directly from the Output tab, or fetch it via the API for automated workflows.

### Use cases

- **Lead generation** — build a list of every Petco location for outreach, partnership research, or competitive mapping.
- **Store locator / mapping apps** — feed a complete, current set of Petco store URLs into your own map or directory.
- **Data pipelines** — use the output as the input list for a downstream Actor (like Petco Store Metadata) that extracts full store details per URL.
- **Market research** — track how many Petco stores exist and where, without manually browsing the store locator.
- **Monitoring** — schedule recurring runs to detect newly opened or closed Petco store pages over time.

### Petco Store Details Scraper: get full store details

This Actor returns **store page URLs only**. To turn those URLs into full store records — address, phone number, geolocation, and opening hours — pair it with the companion **[Petco Store Details Scraper](https://apify.com/datacach/petco-store-details-scraper)** Actor, which accepts these links as input and extracts the complete details for each store.

### FAQ

#### Is it legal to scrape Petco store data?

This Actor only collects information that Petco already makes **publicly available** on its own website — the kind of data any visitor or search engine can see. That said, scraping laws and a website's terms of service vary, so you're responsible for reviewing Petco's terms and applicable law before using this data commercially. Read more about the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) on the Apify blog.

#### Does this Actor give me store addresses and phone numbers?

Not directly — this Actor extracts store **URLs** only. Pair it with the **[Petco Store Details Scraper](https://apify.com/datacach/petco-store-details-scraper)** Actor to turn each link into a full store record with address, phone, geolocation, and hours.

#### Can I run this Actor on a schedule?

Yes. Apify lets you [schedule](https://docs.apify.com/platform/schedules) this Actor to run automatically — daily, weekly, or on any cron interval — so your store list stays current without manual runs.

#### Can I access the results via API?

Yes. Every run and its dataset are available through the [Apify API](https://docs.apify.com/api/v2), so you can trigger runs and pull results directly into your own application, or connect it to Zapier, Make, or another integration platform.

#### Why did my run collect fewer links than expected?

If the site is temporarily blocking automated requests, the run logs a warning and fails gracefully rather than returning incomplete or incorrect data. Try running again after a short wait.

### 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 Actor — different fields, a different retailer, or a fully managed data feed? Reach out through the **Actor's contact/support page** in Apify Console to discuss a custom solution.

# Actor input Schema

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

Maximum number of unique store links to collect. Set to <b>0</b> for an unlimited run collecting every Petco store link in the US. Links come from the public stores.petco.com sitemap, so no coordinates are needed. Free plan is capped at 10 links.

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

Skip this many results from the <b>start</b> before saving any. Use it to paginate across runs: if you already have the first 500 links, set <b>500</b> to begin from result 501 and avoid paying for links you already have. Links are discovered in a stable sitemap order, so index N is reproducible between runs — but the Actor still has to crawl up to that point, so a large value doesn't speed up the run, only what gets saved. Combined with <b>Max results</b>, the saved range is \[startIndex, startIndex + maxResults). Ignored on the free plan.

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

Store link URLs you already have, e.g. <code>https://stores.petco.com/ak/anchorage/pet-supplies-anchorage-ak-1215.html</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": 20,
  "startIndex": 0,
  "excludeUrls": []
}
```

# 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": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("datacach/petco-store-links-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": 20 }

# Run the Actor and wait for it to finish
run = client.actor("datacach/petco-store-links-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": 20
}' |
apify call datacach/petco-store-links-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Petco Store Links Scraper",
        "description": "Extract every Petco store page URL across the US from the public store locator sitemap. Deduplicated links dataset, ready for lead-gen, mapping, or feeding a store-details scraper. No coding required.",
        "version": "0.0",
        "x-build-id": "dwTNtEnoR8MUxhg84"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/datacach~petco-store-links-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-datacach-petco-store-links-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/datacach~petco-store-links-scraper/runs": {
            "post": {
                "operationId": "runs-sync-datacach-petco-store-links-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/datacach~petco-store-links-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-datacach-petco-store-links-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of unique store links to collect. Set to <b>0</b> for an unlimited run collecting every Petco store link in the US. Links come from the public stores.petco.com sitemap, so no coordinates are needed. Free plan is capped at 10 links.",
                        "default": 20
                    },
                    "startIndex": {
                        "title": "Start index",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Skip this many results from the <b>start</b> before saving any. Use it to paginate across runs: if you already have the first 500 links, set <b>500</b> to begin from result 501 and avoid paying for links you already have. Links are discovered in a stable sitemap order, so index N is reproducible between runs — but the Actor still has to crawl up to that point, so a large value doesn't speed up the run, only what gets saved. Combined with <b>Max results</b>, the saved range is [startIndex, startIndex + maxResults). Ignored on the free plan.",
                        "default": 0
                    },
                    "excludeUrls": {
                        "title": "Already Collected URLs",
                        "type": "array",
                        "description": "Store link URLs you already have, e.g. <code>https://stores.petco.com/ak/anchorage/pet-supplies-anchorage-ak-1215.html</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.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
