Grubhub scraper API: search results and restaurant pages as JSON
Send any Grubhub page URL with recipe=grubhub and get title, name, rating and 10 more fields as JSON. No selectors to write, no proxies to pick.
- 2 page types
- 13 fields
- 5 credits a page · $0.50 per 1,000
- Working · 100% in 7 days
5,000 free credits for 7 days, no card.
curl -G 'https://api.ujeebu.com/scrape' \
-H "ApiKey: $UJEEBU_API_KEY" \
--data-urlencode 'url=https://www.grubhub.com/delivery/pa-philadelphia' \
--data-urlencode 'recipe=grubhub/listing'
{
"result": {
"title": "Alanza: Traditional Italian by Wonder (Jenkin...",
"rating": "4.1 (7)",
"cuisine": "Italian"
},
"success": true
}
What you get from Grubhub
The fields of each page type and a real sample from our last validation, shortened.
Search and listing pages recipe=grubhub/listing 5 credits a page
| Field | Type | Example |
|---|---|---|
restaurants | list of 3+ items | |
restaurants[].url | URL | https://www.grubhub.com/restaurant/deli-on-4th-326-fayette-st-consh... |
restaurants[].title | text | Deli on 4th |
restaurants[].cuisine | text | Sandwich |
restaurants[].rating | text | 4.8 (1k) |
item_list | list of 3+ items | |
item_list[].name | text | Deli on 4th |
item_list[].url | URL | https://www.grubhub.com/restaurant/deli-on-4th-326-fayette-st-consh... |
Sample answer, validated 2026-10-29
{
"restaurants": [
{
"url": "https://www.grubhub.com/restaurant/alanza-traditional-italian-by-wonder-jenkintown-1591-the-fairway-jenkintown/12874288",
"title": "Alanza: Traditional Italian by Wonder (Jenkintown)",
"cuisine": "Italian",
"rating": "4.1 (7)"
},
{
"url": "https://www.grubhub.com/restaurant/di-fara-pizza-by-wonder-jenkintown-1591-the-fairway-jenkintown/12867176",
"title": "Di Fara Pizza by Wonder (Jenkintown)",
"cuisine": "Italian",
"rating": "4.0 (3)"
}
],
"item_list": [
{
"name": "Alanza: Traditional Italian by Wonder (Jenkintown)",
"url": "https://www.grubhub.com/restaurant/alanza-traditional-italian-by-wonder-jenkintown-1591-the-fairway-jenkintown/12874288?utm_source=google&utm_medium=organic&..."
},
{
"name": "Di Fara Pizza by Wonder (Jenkintown)",
"url": "https://www.grubhub.com/restaurant/di-fara-pizza-by-wonder-jenkintown-1591-the-fairway-jenkintown/12867176?utm_source=google&utm_medium=organic&utm_campaign=..."
}
]
}
Restaurant pages recipe=grubhub/detail 5 credits a page
| Field | Type | Example |
|---|---|---|
place.city | text | Philadelphia |
place.country | text | USA |
place.cuisine | text | Pasta, Pizza, Salads |
place.image | URL | https://media-cdn.grubhub.com/image/upload/d_search:browse-images:d... |
place.name | text | Old English Style Pizza |
place.postal_code | number (as text) | 19120 |
place.rating | number (as text) | 4.3 |
place.region | text | PA |
place.review_count | number | 35 |
place.street | text | 6015 N 5th St |
description | text | Order delivery or pickup from Old English Style Pizza in Philadelph... |
url | URL | https://www.grubhub.com/restaurant/old-english-style-pizza-6015-n-5... |
Sample answer, validated 2026-10-29
{
"place": {
"city": "Philadelphia",
"country": "USA",
"cuisine": "Pasta, Pizza, Salads",
"image": "https://media-cdn.grubhub.com/image/upload/d_search:browse-images:default.jpg/w_100,q_80,fl_lossy,dpr_2.0,c_fit,f_auto,h_100/kwmin7qgcefpmri3zlbn",
"name": "Old English Style Pizza",
"postal_code": "19120",
"rating": "4.5",
"region": "PA",
"review_count": 10,
"street": "6015 N 5th St"
},
"description": "Order delivery or pickup from Old English Style Pizza in Philadelphia! View Old English Style Pizza's October 2026 deals and menus. Support your local restau...",
"url": "https://www.grubhub.com/restaurant/old-english-style-pizza-6015-n-5th-st-philadelphia/4627840"
}
One call
Send the page URL and the recipe name to the Scrape API. The recipe brings the extract rules and the settings that work on Grubhub (JavaScript rendering and a wait for the content).
curl -G 'https://api.ujeebu.com/scrape' \
-H "ApiKey: $UJEEBU_API_KEY" \
--data-urlencode 'url=https://www.grubhub.com/delivery/pa-philadelphia' \
--data-urlencode 'recipe=grubhub/listing'
import os, requests
r = requests.get(
"https://api.ujeebu.com/scrape",
params={"url": "https://www.grubhub.com/delivery/pa-philadelphia", "recipe": "grubhub/listing"},
headers={"ApiKey": os.environ["UJEEBU_API_KEY"]},
timeout=120,
)
print(r.json()["result"])
const params = new URLSearchParams({
url: "https://www.grubhub.com/delivery/pa-philadelphia",
recipe: "grubhub/listing",
});
const res = await fetch(`https://api.ujeebu.com/scrape?${params}`, {
headers: { ApiKey: process.env.UJEEBU_API_KEY },
});
console.log((await res.json()).result);
The answer is {"result": {...}} with the headers Ujb-Recipe and Ujb-Credits. Other page types: recipe=grubhub/detail, or recipe=grubhub and the API picks the page type from the URL. Your own parameters always win over the recipe.
Search Grubhub with parameters
Fill in the parameters and we build the Grubhub search URL. The Playground and the Request builder do it for you.
| Parameter | Type | Values |
|---|---|---|
city required | string | US city. |
state required | string | Two-letter US state code. |
Works today: the built URL with recipe=grubhub/listing (city=Philadelphia, state=pa)
GET https://api.ujeebu.com/scrape?url=https%3A%2F%2Fwww.grubhub.com%2Fdelivery%2Fpa-philadelphia&recipe=grubhub%2Flisting
A single call with the parameters and no URL is coming to the API; it is not live yet. Search with parameters in the docs
What people build with Grubhub data
Restaurant market research
Map the restaurants of an area with their cuisine, rating and delivery terms.
Learn more
Price
Same price as the page call, no fee for the recipe. Only successful responses are billed; blocked, timed-out and failed requests are free.
| Page type | Credits a page | Per 1,000, Starter | Per 1,000, Pro |
|---|---|---|---|
| Search results, Restaurant page | 5 | $0.82 | $0.50 |
FAQ
What does the Grubhub recipe return?
JSON with 13 fields from search results (recipe=grubhub/listing) and restaurant page (recipe=grubhub/detail), for example title, name, rating, url, cuisine. The answer is {"result": {...}} with the fields shown on this page.
How much does it cost to scrape Grubhub?
5 credits a page ($0.50 per 1,000 on Pro, $0.82 on Starter). Same price as the page call, no fee for the recipe. Only successful responses are billed; blocked, timed-out and failed requests are free.
Do I need proxies or a headless browser?
No. The recipe brings the settings that work on Grubhub: JavaScript rendering and a wait for the content. Send only the URL and recipe=grubhub/listing.
What happens when Grubhub changes its pages?
We check Grubhub every day and re-validate the recipe on real pages every week, then fix it when the site changes. Until a fix is live, the API answers 404 "the recipe has no working version" instead of empty data, and that call is free.
Can I search Grubhub with parameters?
Yes. Fill in city, state: we build the Grubhub search URL, and the call is that URL with recipe=grubhub/listing. A single call with the parameters and no URL is coming to the API; it is not live yet.
Related recipes
- Uber EatsRestaurant page · 5 credits
TalabatSearch results · 25 credits
LinkedInSearch results, Detail page, Profile · 5 credits
AmazonSearch results, Product page · 5 credits
X (Twitter)Profile · 5 credits
InstagramProfile · 5 credits
Logos and names belong to their owners. Ujeebu is not affiliated with Grubhub.
Get Grubhub data as JSON today.
5,000 free credits for 7 days. No card.