# DoorDash Reviews Scraper (`maximedupre/doordash-reviews-scraper`) Actor

Extract public DoorDash review previews from store pages. Export reviewer names, ratings, review text, timestamps, store IDs, and source URLs.

- **URL**: https://apify.com/maximedupre/doordash-reviews-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** E-commerce
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$0.50 / 1,000 review previews

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.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/platform/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

### 🍽️ DoorDash Reviews Scraper

DoorDash Reviews Scraper extracts public review previews from [DoorDash](https://www.doordash.com/) store pages and saves them as clean Apify dataset rows. Add DoorDash store URLs or numeric store IDs, run the Actor, and export reviewer names, ratings, review text, timestamps, tagged item IDs, source URLs, and scrape metadata.

Use it when you need a quick DoorDash reviews scraper for restaurant feedback checks, local market research, customer sentiment review, or repeat monitoring across many store pages. The Actor is intentionally focused on the public reviews visible on logged-out DoorDash store pages. It does not ask you for DoorDash login credentials, cookies, or API keys.

### ✅ What this actor does

- Scrapes public DoorDash review previews from store pages.
- Accepts DoorDash store URLs, slug URLs, and numeric store IDs.
- Returns one dataset row per review preview.
- Captures reviewer name, rating, review text, review timestamp, verification flag, source type, and rating label when DoorDash shows them.
- Extracts item IDs mentioned in DoorDash's marked-up review text when available.
- Adds store ID, resolved store URL, input target URL, source platform, target index, review index, and scrape time.
- Lets you cap reviews per store and across the whole run.
- Supports output sorting by source order, newest, highest rating, or lowest rating.
- Can include the raw DoorDash review object for auditing.

DoorDash may show only a preview set of public reviews to logged-out visitors. In testing, the public store page exposed visible review previews, while deeper "See All" review access required login. For that reason, this Actor is best for collecting public review previews across many stores, not for deep-paginating every review from one store.

### 📊 Data you can extract

Each row represents one DoorDash review preview. Depending on what DoorDash exposes for a store, rows can include:

- `reviewId`: DoorDash review UUID.
- `reviewText`: public review text.
- `markedUpReviewText`: DoorDash text with tagged item markup when shown.
- `rating`: star rating from 1 to 5.
- `reviewedAt`: review timestamp.
- `reviewerId`, `reviewerName`, and `reviewerDescription`.
- `isVerified`: whether DoorDash marks the review as verified.
- `experience`, `reviewSource`, and `consumerReviewSource`.
- `taggedItemIds`: item IDs extracted from marked-up text.
- `ratingTagTitle`: labels such as "Loved" or "Liked" when shown.
- `storeId`, `storeUrl`, `targetUrl`, `targetIndex`, and `reviewIndex`.
- `sourcePlatform` and `scrapedAt`.
- `rawReviewData` when raw review data is enabled.

The rows are designed to be useful in CSV, JSON, Excel, API, scheduled runs, webhooks, and downstream BI workflows.

### 🚀 How to run it

1. Open the Actor input.
2. Add one or more DoorDash store pages in **DoorDash store targets**.
3. Use a full URL such as `https://www.doordash.com/store/27544161`, a slug URL, or a numeric store ID.
4. Keep the prefilled store and low limits for a small first run, or add more stores when you are ready to collect a larger DoorDash review dataset.
5. Start the Actor and open the dataset when the run finishes.

For best results, submit several stores when you need more than a few reviews. DoorDash's public logged-out page commonly exposes a preview set per store.

### 🧾 Input

| Field | Description |
| --- | --- |
| `startUrls` | DoorDash store URLs, slug URLs, or numeric store IDs. |
| `maxReviewsTotal` | Maximum review preview rows across the whole run. |
| `maxReviewsPerPlace` | Maximum review preview rows to save for each DoorDash store. |
| `sortBy` | Output order: source order, newest, highest rating, or lowest rating. |
| `includeRawReviewData` | Include the raw DoorDash review object for auditing. |

Example input:

```json
{
	"startUrls": [
		{ "url": "https://www.doordash.com/store/27544161" },
		{ "url": "https://www.doordash.com/store/la-pecora-bianca-26194917/" }
	],
	"maxReviewsTotal": 20,
	"maxReviewsPerPlace": 5,
	"sortBy": "source_order",
	"includeRawReviewData": false
}
````

### 📦 Output example

```json
{
	"reviewId": "a0d43b28-a5f4-4914-8ed3-8528e5f709e4",
	"reviewText": "Lena's has great, big portions and the food is overall very tasty.",
	"markedUpReviewText": "Lena's has great, big portions and the food is overall very tasty.",
	"rating": 5,
	"reviewedAt": "2026-04-27T02:23:34.680Z",
	"reviewerId": "1553580317",
	"reviewerName": "Max G",
	"reviewerDescription": "Emerging Expert • 15 contributions",
	"isVerified": true,
	"experience": 1,
	"reviewSource": "DoorDash",
	"consumerReviewSource": "CONSUMER_REVIEW_SOURCE_DOORDASH",
	"taggedItemIds": ["11839454237"],
	"ratingTagTitle": "Loved",
	"storeId": "27544161",
	"storeUrl": "https://www.doordash.com/store/27544161",
	"targetUrl": "https://www.doordash.com/store/27544161",
	"targetIndex": 0,
	"reviewIndex": 1,
	"targetStatus": "partial",
	"sourcePlatform": "doordash",
	"scrapedAt": "2026-05-24T00:00:00.000Z"
}
```

### 💰 Pricing

This Actor uses pay-per-event pricing. You are charged for each DoorDash review preview that is successfully saved to the dataset.

The default input is small, so you can inspect the output shape before running a larger batch. Use **Maximum reviews** and **Reviews per store** to control the size and cost of each run.

### ⚠️ Limits and caveats

- DoorDash controls which public reviews are shown to logged-out visitors.
- The Actor extracts public review previews visible on DoorDash store pages.
- It does not log in to DoorDash or collect private account-only review pages.
- Clicking DoorDash's deeper "See All" review flow may require login, so this Actor does not promise complete review history for a single store.
- Some stores may show no public review previews even when they have aggregate ratings.
- Store availability, review visibility, and page content can change over time.

### ❓ FAQ

#### ❓ Can I scrape all DoorDash reviews for one store?

Not reliably without an authenticated access contract. This Actor extracts the public review previews DoorDash exposes on logged-out store pages. For larger datasets, submit multiple store URLs.

#### 🔐 Do I need DoorDash cookies or login credentials?

No. The public input does not ask for cookies, passwords, accounts, or API keys.

#### 🔢 Can I use numeric DoorDash store IDs?

Yes. You can paste a numeric store ID such as `27544161`, a direct store URL, or a DoorDash slug URL that contains a store ID.

#### 🔎 What happens if a store has no public review previews?

The Actor skips that target, logs a clear message, and continues with the remaining stores. It does not add fake status rows to your dataset.

#### 📅 Can I schedule this DoorDash reviews scraper?

Yes. After you confirm your input list, you can schedule runs on Apify, call the Actor through the API, export datasets, or connect results to webhooks and integrations.

### 📝 Changelog

- 0.0: Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~doordash-reviews-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Other actors

- [Facebook Reviews Scraper ↗](https://apify.com/maximedupre/facebook-reviews-scraper) - collect public Facebook Page recommendations and review-style feedback.
- [App Store Ratings Scraper ↗](https://apify.com/maximedupre/app-store-ratings-scraper) - monitor Google Play and Apple App Store ratings and metadata.
- [Google Shopping Ads Scraper ↗](https://apify.com/maximedupre/google-shopping-ads-scraper) - export live paid product ads from Google Search.
- [Business Address Scraper ↗](https://apify.com/maximedupre/business-address-scraper) - find public business addresses from company websites.
- [Website Emails Scraper ↗](https://apify.com/maximedupre/website-emails-scraper) - extract public contact emails from websites you submit.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `startUrls` (type: `array`):

Add one DoorDash store URL or numeric store ID per row. Full store URLs, slug URLs, and plain numeric IDs are accepted.

## `maxReviewsTotal` (type: `integer`):

Maximum number of DoorDash review preview rows across the whole run.

## `maxReviewsPerPlace` (type: `integer`):

Maximum number of public review preview rows to save for each DoorDash store.

## `sortBy` (type: `string`):

Sort returned review previews after extraction. Source order keeps DoorDash's visible page order.

## `includeRawReviewData` (type: `boolean`):

Include the raw DoorDash review object for downstream auditing. Leave off for cleaner default exports.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.doordash.com/store/27544161"
    }
  ],
  "maxReviewsTotal": 50,
  "maxReviewsPerPlace": 25,
  "sortBy": "source_order",
  "includeRawReviewData": false
}
```

# Actor output Schema

## `results` (type: `string`):

DoorDash review preview dataset rows

# 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 = {
    "startUrls": [
        {
            "url": "https://www.doordash.com/store/27544161"
        }
    ],
    "maxReviewsTotal": 50,
    "maxReviewsPerPlace": 25,
    "sortBy": "source_order"
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/doordash-reviews-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 = {
    "startUrls": [{ "url": "https://www.doordash.com/store/27544161" }],
    "maxReviewsTotal": 50,
    "maxReviewsPerPlace": 25,
    "sortBy": "source_order",
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/doordash-reviews-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 '{
  "startUrls": [
    {
      "url": "https://www.doordash.com/store/27544161"
    }
  ],
  "maxReviewsTotal": 50,
  "maxReviewsPerPlace": 25,
  "sortBy": "source_order"
}' |
apify call maximedupre/doordash-reviews-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "DoorDash Reviews Scraper",
        "description": "Extract public DoorDash review previews from store pages. Export reviewer names, ratings, review text, timestamps, store IDs, and source URLs.",
        "version": "0.0",
        "x-build-id": "5d4JZyHpEshhcL5RI"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/maximedupre~doordash-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-maximedupre-doordash-reviews-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/maximedupre~doordash-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-maximedupre-doordash-reviews-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/maximedupre~doordash-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-maximedupre-doordash-reviews-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",
                "required": [
                    "startUrls",
                    "maxReviewsTotal",
                    "maxReviewsPerPlace",
                    "sortBy",
                    "includeRawReviewData"
                ],
                "properties": {
                    "startUrls": {
                        "title": "DoorDash store targets",
                        "minItems": 1,
                        "type": "array",
                        "description": "Add one DoorDash store URL or numeric store ID per row. Full store URLs, slug URLs, and plain numeric IDs are accepted.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxReviewsTotal": {
                        "title": "Maximum reviews",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of DoorDash review preview rows across the whole run.",
                        "default": 50
                    },
                    "maxReviewsPerPlace": {
                        "title": "Reviews per store",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of public review preview rows to save for each DoorDash store.",
                        "default": 25
                    },
                    "sortBy": {
                        "title": "Sort reviews by",
                        "enum": [
                            "source_order",
                            "newest",
                            "highest_rating",
                            "lowest_rating"
                        ],
                        "type": "string",
                        "description": "Sort returned review previews after extraction. Source order keeps DoorDash's visible page order.",
                        "default": "source_order"
                    },
                    "includeRawReviewData": {
                        "title": "Include raw review data",
                        "type": "boolean",
                        "description": "Include the raw DoorDash review object for downstream auditing. Leave off for cleaner default exports.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
