# Pizza Hut Store Locator (US, CA, UK, FR, DE, ES, IN) (`aitorsm/pizza-hut-store-locator`) Actor

Find Pizza Hut stores in the US, Canada, the UK, France, Germany, Spain and India with addresses, coordinates, phone numbers, hours where published, and delivery, carryout, and dine-in services.

- **URL**: https://apify.com/aitorsm/pizza-hut-store-locator.md
- **Developed by:** [Aitor Sanchez-Mansilla](https://apify.com/aitorsm) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 stores

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Pizza Hut Store Locator — US, Canada, UK, France, Germany, Spain, India, Australia

Find published Pizza Hut locations without browsing each country's locator. This Actor returns one row per store with the same keys in every market: address, coordinates, phone, hours where the market publishes them, and delivery, carryout and dine-in flags.

**Terms of use:** [Pizza Hut's US Terms of Use](https://www.pizzahut.com/terms-of-use) limit use of its Services to personal, noncommercial purposes and restrict copying and distribution. Make sure your use of the results complies with them.

### Coverage

Checked on 2026-09-25. "Rows" is the full-market count from a run that day; counts change.

| Market | `country` | Rows | Hours | Notes |
| --- | --- | --- | --- | --- |
| United States | `US` | 6,339 incl. Guam/N. Mariana Islands | weekly | store page URLs |
| Canada | `CA` | 620 | today, with `includeHours` | |
| United Kingdom | `GB` (alias `UK`) | 508 (363 Pizza Hut Delivery + 145 Pizza Hut Restaurants) | today, with `includeHours` | `storeType` tells the businesses apart; no region; city is parsed from address lines |
| France | `FR` | 108 | today, with `includeHours` | delivery/collection flags not published (null) |
| India | `IN` | 1,015 | today, with `includeHours` | |
| Germany | `DE` | 72 | weekly | postal code only when the address includes it; store page URLs |
| Spain | `ES` | 14 (pickup stores) | today | no phone numbers; only stores Pizza Hut Spain lists |
| Australia | `AU` | 294 (incl. 3 coming soon) | today, by channel | phone only with `includeDetails` |
| `all` | `all` | every market above, in that order | | |

**Not covered:** Japan, Mexico and other countries.

### Input

| Field | Meaning |
| --- | --- |
| `country` | `US`, `CA`, `GB`, `FR`, `DE`, `ES`, `IN`, `AU`, or `all`. Default `US`. |
| `region` | Optional exact region: two-letter code for US and Canada, state name for India and Germany, state code for Australia (`NSW`, `QLD`, …). UK, France and Spain rows have no region, so a region filter excludes them. |
| `cityNames` | Exact city names (case-insensitive), combined as a union. For the UK a name matches any address line, e.g. `Greenwich Peninsula`. |
| `postalCodes` | Exact postal codes, combined with city results. US: five-digit or ZIP+4. Other markets ignore spacing and case. |
| `allLocations` | `true` to list every store in the selected market(s), optionally within `region`. Clear city and postal lists first. |
| `includeHours` | CA/UK/FR/IN only: fetch today's hours with one extra request per returned store (about one second each). |
| `includeDetails` | AU only: fetch phone, IANA time zone, store type code and the delivery flag with one extra request per returned store (about one second each). |
| `maxStores` | Optional limit on matching store records across all selected markets. |

The Console prefill searches `Austin` in `TX` (US). An empty query (no cities, no postal codes, `allLocations: false`) succeeds with zero rows.

### Output

Every row has these keys; values a market does not publish are `null`:

`market`, `country`, `storeId`, `name`, `address`, `addressLine2`, `city`, `region`, `postalCode`, `lat`, `lng`, `phone`, `timezone`, `hours`, `hoursScope`, `deliveryHours`, `carryoutHours`, `dineInHours`, `services`, `storeType`, `offersDelivery`, `offersCarryout`, `offersDineIn`, `url`, `googlePlaceId`, `comingSoon`, `sourceEntityId`, `source`, `sourceVersion`, `fetchedAt`.

Here is part of a UK row from the 2026-09-25 run, with `includeHours`:

```json
{
  "market": "GB", "country": "GB", "storeId": "271", "name": "Grimsby",
  "address": "Unit 1, 68/72 Victoria Street", "city": "Grimsby", "region": null, "postalCode": "DN31 1BL",
  "lat": 53.5654, "lng": -0.0845, "phone": "01472 242999", "timezone": "Europe/London",
  "hours": { "date": "2026-09-25",
    "collection": [{ "open": "2026-09-25T11:00:00+01:00", "close": "2026-09-25T22:00:00+01:00" }],
    "delivery": [{ "open": "2026-09-25T11:00:00+01:00", "close": "2026-09-25T22:00:00+01:00" }] },
  "hoursScope": "today", "services": ["delivery", "collection"], "storeType": "delivery+restaurant",
  "offersDelivery": true, "offersCarryout": true, "offersDineIn": true, "url": null
}
```

Market-specific notes:

- **Hours.** `hoursScope: "weekly"` means US `openIntervals` per day (plus US delivery, carryout and dine-in hours), or German per-day strings starting Sunday, with a closed day as `[]`. `"today"` means the current day's intervals with UTC offsets, grouped by channel (CA/UK/FR/IN) or listed (ES, AU). Overnight intervals and holidays are not converted.
- **Services.** These are codes as each market publishes them: US service codes, `delivery`/`collection` for CA/UK/FR/IN, German platform features (`pickup`, `delivery`, `dinein`, `express`, …), `pickup` for Spain, and for Australia `delivery`/`pickup`/`dine-in`/`express` plus the site's store tags (`open-late`). A `null` flag means the market does not publish it; it is not `false`.
- **UK.** Pizza Hut Delivery units are `storeType: "delivery"`. Pizza Hut Restaurants are `"restaurant"`. Nineteen restaurants that also run delivery are listed twice in the UK store list; they are merged into one row with `"delivery+restaurant"`.
- **Germany.** Addresses are parsed from the formatted text because the published city field is sometimes wrong. The test entry "TS OC Lab" is excluded.
- **Australia.** One request returns all stores with eight days of trading hours; the rows carry today's store-local day (Australian date) as `{ date, intervals }` in `hours` (trading hours), `deliveryHours`, `carryoutHours` (the pickup window the site offers) and `dineInHours` (restaurants only). Closing times after midnight fall on the next date. `offersDelivery` is `false` only when none of the eight published days has a delivery window. `timezone` is derived from the state and the published UTC offset (with `includeDetails`, the store's own IANA zone). `city` is the listed suburb; the two express food-court stores give `Sydney`. `url` follows the site's store-page rule (`/stores/pizza-hut-<name>`). `googlePlaceId` is the store's Google place ID (7 stores have none). `comingSoon: true` marks listed stores the site's own directory does not show yet (3 on 2026-09-25). Phone numbers are not in the list; with `includeDetails` they come from the store detail as published, which can be the national number `13 11 66` or missing.
- **Spain.** Postal codes that lost their leading zero are restored (`7400` becomes `07400`). The timezone label is kept as published (`Europe/Brussels`, same offset as Madrid).

`RUN_SUMMARY` in the default key-value store records per-market `itemsFound`, `itemsDelivered` and `status`, plus the overall `stopReason`: `completed`, `max_stores_reached`, `charge_limit_reached`, or `request_failed`. Empty matching queries succeed. Retrieval failures, including a changed response shape or an empty market list, fail the run, even after partial delivery.

### Pricing

Pay per store returned; see the Pricing tab for the current rate. If you set a spending limit, the run stops fetching once the limit is reached, and every store already returned is kept.

### Use cases

- Check the published address, coordinates and service flags for Pizza Hut stores in a city or postal code.
- Compare store networks across the US, Canada, the UK, France, Germany, Spain, India and Australia.

### Related Actors

- [PC Express Store Locations](https://apify.com/aitorsm/pcexpress-store-locations) is the related Canadian grocery store locator Actor.

### FAQ

**Does it cover Australia, Japan or Mexico?** Australia yes. Japan and Mexico no.

**Are service flags guaranteed?** No. A `null` flag means the market does not publish that service; it is not the same as `false`.

**Is a zero-row result an error?** No. A valid exact query may match no stores. Failed or malformed responses are reported as failures.

**How fresh are results?** Each row records the fetch time. Each new run retrieves the current store lists.

# Actor input Schema

## `country` (type: `string`):

Market to search, or all of them. Japan, Mexico and other countries are not covered.

## `region` (type: `string`):

Optional exact region as published: two-letter code for US (RI) and Canada (ON), state name for India (Karnataka) and Germany (Bayern), state code for Australia (NSW). UK, France and Spain rows have no region, so a region filter matches none of them.

## `cityNames` (type: `array`):

Exact city names (case-insensitive). A store matching any listed city is returned. For the UK a name matches any address line, e.g. a town or district. Clear this list for an empty query or all-locations mode.

## `postalCodes` (type: `array`):

Exact postal codes; results are combined with city results. US searches need five-digit or ZIP+4 codes; other markets ignore spaces and case (NW9 9ED).

## `allLocations` (type: `boolean`):

Enumerate all stores in the selected market (or all markets), optionally within a region. Clear city and postal code lists first.

## `includeHours` (type: `boolean`):

These markets publish hours only per store and only for the current day, so this makes one extra request per returned store (about one second each). US and Germany always include weekly hours; Spain always includes today's hours.

## `includeDetails` (type: `boolean`):

Australia's store list has no phone numbers. This makes one extra request per returned Australian store (about one second each) to add phone, IANA time zone, store type and the delivery flag.

## `maxStores` (type: `integer`):

Stop after this many matching store records across all selected markets. Leave blank for every matching store.

## Actor input object example

```json
{
  "country": "US",
  "region": "TX",
  "cityNames": [
    "Austin"
  ],
  "allLocations": false,
  "includeHours": false,
  "includeDetails": false
}
```

# Actor output Schema

## `stores` (type: `string`):

No description

## `runSummary` (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 = {
    "region": "TX",
    "cityNames": [
        "Austin"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("aitorsm/pizza-hut-store-locator").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 = {
    "region": "TX",
    "cityNames": ["Austin"],
}

# Run the Actor and wait for it to finish
run = client.actor("aitorsm/pizza-hut-store-locator").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "region": "TX",
  "cityNames": [
    "Austin"
  ]
}' |
apify call aitorsm/pizza-hut-store-locator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,aitorsm/pizza-hut-store-locator"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/rdNBa6j5MqZxbgogx/builds/ciOZzkZos4edv90oO/openapi.json
