{
  "data": {
    "id": "hLiM39f0cZYa0ohpd",
    "actId": "YQuuDIpkXOu0xEPQ1",
    "userId": "IYgBDiXtHOijAaUel",
    "startedAt": "2026-11-11T00:11:25.298Z",
    "finishedAt": "2026-11-11T00:12:42.062Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CI"
    },
    "stats": {
      "durationMillis": 76658,
      "runTimeSecs": 76.658,
      "computeUnits": 0.08517555555555556,
      "imageSizeBytes": 4084469760
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "QYo53EZkJk0prePWY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"DoorDash Restaurant Scraper Input\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"storeUrls\": {\n      \"title\": \"Store URLs\",\n      \"type\": \"array\",\n      \"description\": \"DoorDash store URLs (e.g., https://www.doordash.com/store/15034). Each store will be scraped for full menu + restaurant info.\",\n      \"editor\": \"stringList\",\n      \"prefill\": [\n        \"https://www.doordash.com/store/15034\"\n      ]\n    },\n    \"maxItems\": {\n      \"title\": \"Max Items\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of restaurants to scrape across all URLs.\",\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"default\": 10,\n      \"prefill\": 1\n    }\n  },\n  \"required\": []\n}",
    "readme": "# DoorDash Store Menu & FAQ Data Finder\n\nFind restaurant details and complete menus from **DoorDash** store pages — name, address, cuisine breadcrumbs, menu sections with item names, descriptions and prices, and the store's published FAQ. Provide one or more store URLs and get a flat, fully-populated record back for each.\n\n## What this actor does\n\n- **Full menu extraction** — every section and item, with name, description, and price\n- **FAQ extraction** — questions and answers published on the restaurant's store page\n- **Breadcrumb extraction** — cuisine type and neighborhood, as shown on the page\n- **Deduplication** — the same store ID is only emitted once per run, even if its URL is listed twice\n- **Always-populated fields** — every field is present with a typed default (empty string, `0`, or `[]`) rather than `null`, so downstream code never needs to check for missing keys\n\n## Output per restaurant\n\n- `storeId` — DoorDash store ID (from the URL)\n- `storeName`, `storeUrl`\n- `title`, `description` — the page's title and meta description\n- `address`, `city`, `state`\n- `breadcrumbs[]` — page breadcrumb trail, e.g. `[\"Home\", \"Boston\", \"Burgers\", \"UBURGER\"]` (last is the restaurant name, second-to-last is typically the cuisine)\n- `menuSections[]` — section names, e.g. `[\"Salads\", \"Burgers\", \"Drinks\"]`\n- `menuSectionCount`\n- `menuItems[]` — flat list of `{section, name, description, price}`\n- `menuItemCount`\n- `faq[]` — list of `{question, answer}` pairs\n- `faqCount`\n- `scrapedAt`\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `storeUrls` | array | – | DoorDash store URLs to scrape |\n| `maxItems` | integer | `10` | Maximum restaurants to scrape across all URLs (1–100) |\n\n### Example: scrape a list of specific stores\n\n```json\n{\n  \"storeUrls\": [\n    \"https://www.doordash.com/store/15034\",\n    \"https://www.doordash.com/store/6422\"\n  ],\n  \"maxItems\": 10\n}\n```\n\n### Example: a single store\n\n```json\n{\n  \"storeUrls\": [\"https://www.doordash.com/store/15034\"],\n  \"maxItems\": 1\n}\n```\n\n## Use cases\n\n- **Competitor menu intelligence** — track pricing and item offerings for named restaurants over time\n- **Cuisine analysis** — group restaurants by their breadcrumb cuisine tag\n- **Menu engineering research** — compare which sections and items are common across similar restaurants\n- **Franchise auditing** — pull menus for every location of a chain by store URL\n- **Customer support/FAQ research** — collect how restaurants answer common ordering questions\n\n## FAQ\n\n**Why doesn't this return individual customer reviews?** DoorDash store pages no longer expose individual customer reviews — only aggregate signals surfaced elsewhere on the page. This actor extracts everything the store page actually publishes: menu, address, FAQ, and breadcrumbs.\n\n**How do I find a store's URL?** Visit the restaurant on doordash.com and copy its page URL, in the form `https://www.doordash.com/store/<id>`.\n\n**Can I get prices as numbers instead of strings?** Prices are returned as strings (e.g. `\"$8.50\"`) because DoorDash sometimes shows ranges or non-numeric formatting. Convert them downstream if you need numeric values.\n\n**Will this work for every DoorDash store?** It works for any restaurant with a published menu. Some stores — closed restaurants, catering/aggregator brands, or convenience-store and grocery listings — don't expose a structured menu; for those, this actor still returns the restaurant's info, FAQ, breadcrumbs, and address, but `menuSections` and `menuItems` come back empty.\n\n**Does this include duplicate stores if I list the same URL twice?** No — each store ID is only emitted once per run even if its URL appears more than once in `storeUrls`.\n\n**Is this affiliated with DoorDash?** No. This is an independent third-party actor that reads DoorDash's public store pages.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "doordash-store-menu-and-faq-data-finder",
      "title": "DoorDash Store Menu & FAQ Data Finder",
      "description": "Find DoorDash restaurant store details and complete menus by store URL, including name, address, cuisine breadcrumbs, menu sections with item names, descriptions, and prices, and the store's published FAQ.",
      "version": "1.0",
      "buildTag": "latest",
      "meta": {
        "templateId": "python-empty"
      },
      "input": {
        "title": "DoorDash Restaurant Scraper Input",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "storeUrls": {
            "title": "Store URLs",
            "type": "array",
            "description": "DoorDash store URLs (e.g., https://www.doordash.com/store/15034). Each store will be scraped for full menu + restaurant info.",
            "editor": "stringList",
            "prefill": [
              "https://www.doordash.com/store/15034"
            ]
          },
          "maxItems": {
            "title": "Max Items",
            "type": "integer",
            "description": "Maximum number of restaurants to scrape across all URLs.",
            "minimum": 1,
            "maximum": 100,
            "default": 10,
            "prefill": 1
          }
        },
        "required": []
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "DoorDash Store Menu & FAQ Data Finder Output",
        "type": "object",
        "properties": {
          "reviews": {
            "type": "string",
            "title": "DoorDash Reviews",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        },
        "description": "DoorDash restaurant store records with address, cuisine breadcrumbs, full menu sections and items with prices, and the store's published FAQ."
      },
      "dockerfile": "../Dockerfile",
      "readme": "# DoorDash Store Menu & FAQ Data Finder\n\nFind restaurant details and complete menus from **DoorDash** store pages — name, address, cuisine breadcrumbs, menu sections with item names, descriptions and prices, and the store's published FAQ. Provide one or more store URLs and get a flat, fully-populated record back for each.\n\n## What this actor does\n\n- **Full menu extraction** — every section and item, with name, description, and price\n- **FAQ extraction** — questions and answers published on the restaurant's store page\n- **Breadcrumb extraction** — cuisine type and neighborhood, as shown on the page\n- **Deduplication** — the same store ID is only emitted once per run, even if its URL is listed twice\n- **Always-populated fields** — every field is present with a typed default (empty string, `0`, or `[]`) rather than `null`, so downstream code never needs to check for missing keys\n\n## Output per restaurant\n\n- `storeId` — DoorDash store ID (from the URL)\n- `storeName`, `storeUrl`\n- `title`, `description` — the page's title and meta description\n- `address`, `city`, `state`\n- `breadcrumbs[]` — page breadcrumb trail, e.g. `[\"Home\", \"Boston\", \"Burgers\", \"UBURGER\"]` (last is the restaurant name, second-to-last is typically the cuisine)\n- `menuSections[]` — section names, e.g. `[\"Salads\", \"Burgers\", \"Drinks\"]`\n- `menuSectionCount`\n- `menuItems[]` — flat list of `{section, name, description, price}`\n- `menuItemCount`\n- `faq[]` — list of `{question, answer}` pairs\n- `faqCount`\n- `scrapedAt`\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `storeUrls` | array | – | DoorDash store URLs to scrape |\n| `maxItems` | integer | `10` | Maximum restaurants to scrape across all URLs (1–100) |\n\n### Example: scrape a list of specific stores\n\n```json\n{\n  \"storeUrls\": [\n    \"https://www.doordash.com/store/15034\",\n    \"https://www.doordash.com/store/6422\"\n  ],\n  \"maxItems\": 10\n}\n```\n\n### Example: a single store\n\n```json\n{\n  \"storeUrls\": [\"https://www.doordash.com/store/15034\"],\n  \"maxItems\": 1\n}\n```\n\n## Use cases\n\n- **Competitor menu intelligence** — track pricing and item offerings for named restaurants over time\n- **Cuisine analysis** — group restaurants by their breadcrumb cuisine tag\n- **Menu engineering research** — compare which sections and items are common across similar restaurants\n- **Franchise auditing** — pull menus for every location of a chain by store URL\n- **Customer support/FAQ research** — collect how restaurants answer common ordering questions\n\n## FAQ\n\n**Why doesn't this return individual customer reviews?** DoorDash store pages no longer expose individual customer reviews — only aggregate signals surfaced elsewhere on the page. This actor extracts everything the store page actually publishes: menu, address, FAQ, and breadcrumbs.\n\n**How do I find a store's URL?** Visit the restaurant on doordash.com and copy its page URL, in the form `https://www.doordash.com/store/<id>`.\n\n**Can I get prices as numbers instead of strings?** Prices are returned as strings (e.g. `\"$8.50\"`) because DoorDash sometimes shows ranges or non-numeric formatting. Convert them downstream if you need numeric values.\n\n**Will this work for every DoorDash store?** It works for any restaurant with a published menu. Some stores — closed restaurants, catering/aggregator brands, or convenience-store and grocery listings — don't expose a structured menu; for those, this actor still returns the restaurant's info, FAQ, breadcrumbs, and address, but `menuSections` and `menuItems` come back empty.\n\n**Does this include duplicate stores if I list the same URL twice?** No — each store ID is only emitted once per run even if its URL appears more than once in `storeUrls`.\n\n**Is this affiliated with DoorDash?** No. This is an independent third-party actor that reads DoorDash's public store pages.\n",
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "DoorDash Restaurants",
          "fields": {
            "type": "object",
            "properties": {
              "storeId": {
                "type": "string",
                "description": "DoorDash store ID (from URL)"
              },
              "storeName": {
                "type": "string",
                "description": "Restaurant name"
              },
              "storeUrl": {
                "type": "string",
                "description": "Store page URL"
              },
              "title": {
                "type": "string",
                "description": "Page title"
              },
              "description": {
                "type": "string",
                "description": "Meta description"
              },
              "address": {
                "type": "string",
                "description": "Street address"
              },
              "city": {
                "type": "string",
                "description": "City"
              },
              "state": {
                "type": "string",
                "description": "State / region"
              },
              "breadcrumbs": {
                "type": "array",
                "description": "Page breadcrumb names (cuisine, neighborhood, etc.)"
              },
              "menuSectionCount": {
                "type": "integer",
                "description": "Number of menu sections"
              },
              "menuItemCount": {
                "type": "integer",
                "description": "Total menu items across all sections"
              },
              "menuSections": {
                "type": "array",
                "description": "Section names (e.g., Salads, Burgers, Drinks)"
              },
              "menuItems": {
                "type": "array",
                "description": "Flat list of all menu items: {section, name, description, price}"
              },
              "faqCount": {
                "type": "integer",
                "description": "Number of FAQ Q&A pairs"
              },
              "faq": {
                "type": "array",
                "description": "FAQ Q&A pairs"
              },
              "scrapedAt": {
                "type": "string",
                "description": "ISO 8601 scrape timestamp"
              }
            }
          },
          "views": {
            "overview": {
              "title": "Overview",
              "transformation": {
                "fields": [
                  "storeName",
                  "address",
                  "city",
                  "state",
                  "menuItemCount",
                  "menuSectionCount",
                  "storeUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "storeName": {
                    "label": "Restaurant",
                    "format": "text"
                  },
                  "address": {
                    "label": "Address",
                    "format": "text"
                  },
                  "city": {
                    "label": "City",
                    "format": "text"
                  },
                  "state": {
                    "label": "State",
                    "format": "text"
                  },
                  "menuItemCount": {
                    "label": "Menu Items",
                    "format": "number"
                  },
                  "menuSectionCount": {
                    "label": "Sections",
                    "format": "number"
                  },
                  "storeUrl": {
                    "label": "URL",
                    "format": "link"
                  }
                }
              }
            }
          }
        }
      }
    },
    "buildNumber": "1.0.1",
    "imageDigest": "8003e6aefce9d4ae31c648023edc58239e85128c30c7ec12f80663074723dd71",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.08517555555555556
    }
  }
}