Get every restaurant and dish from YouTube food and travel videos

A food tour names a place, where it is and what the host ordered, again and again. Ask for those three fields and get one row per place, with the dishes as a list.

Maps and guides built from what creators actually visit.
Travel and hospitality research across channels and cities.
Tracking where a restaurant has been featured.
The schema

Describe the fields once

dishes is a list column, so three dishes at one place stay one row. When a place comes up again later in the video, its rows merge and the dish lists are combined.

schema
POST /v1
{
"multiple": true,
"columns": [
{
"name": "restaurant_name",
"type": "verbatim-string",
"description": "Name of each restaurant, diner or food spot the host visits"
},
{
"name": "city",
"type": "string",
"description": "The city or town the place is in, if the host says it"
},
{
"name": "dishes",
"type": "string",
"multiple": true,
"description": "Every dish or drink the host orders or eats at this place"
}
]
}
rows
illustrative output
{
"results": [
{
"restaurant_name": "Mel's Drive-In",
"city": "Los Angeles",
"dishes": [
"double cheeseburger",
"chocolate shake"
]
},
{
"restaurant_name": "Lucy's Drive-In",
"city": "Pasadena",
"dishes": [
"breakfast burrito"
]
}
]
}

The output above shows the shape a video returns, not a recorded result. Types are enforced: numbers come back as numbers, list columns as arrays.

Good to know

What to expect

What it costs

A 26-minute video is 260 credits: 10 per started minute, however many rows come back. Videos that fail, such as those without captions, are never charged. See pricing.

  • TubeExtract reads the video’s existing captions, manual or auto-generated. It does not listen to audio or read the screen, and a video with no captions fails as no_captions.
  • On our own test video, a 26-minute restaurant tour, the current pipeline returned all 7 restaurants and invented none. That is one video with an answer key we wrote, not a general accuracy figure.
  • Near spellings of the same name are merged; two spellings far enough apart can survive as two rows.
  • A place that is shown but never named in the narration will not be found.
Run it

One call, up to 200 videos

Send the schema with your list of videos, then read the job once every video has finished.

curl https://api.tubeextract.dev/v1 \
-H "X-API-Key: $TUBEEXTRACT_KEY" \
-H "Content-Type: application/json" \
-d '{
"videos": [
"https://youtube.com/watch?v=…"
],
"schema": {
"multiple": true,
"columns": [
{
"name": "restaurant_name",
"type": "verbatim-string",
"description": "Name of each restaurant, diner or food spot the host visits"
},
{
"name": "city",
"type": "string",
"description": "The city or town the place is in, if the host says it"
},
{
"name": "dishes",
"type": "string",
"multiple": true,
"description": "Every dish or drink the host orders or eats at this place"
}
]
}
}'
More use cases

Try it on your own videos

New accounts start with 1,000 credits, about 100 minutes of video. Paste the schema above, point it at a video, and check the rows.