{
    "version": "ujb.site-guide/v1",
    "site": "Grubhub",
    "domain": "grubhub.com",
    "category": "food",
    "status": "partial",
    "status_label": "Partly working",
    "success_rate_7d": 61.9,
    "checks_7d": 21,
    "last_checked_at": "2026-10-13T20:34:14Z",
    "last_ok_at": "2026-10-13T20:34:14Z",
    "page_types": [
        {
            "page_type": "Public pages",
            "page_kinds": [
                "page",
                "detail"
            ],
            "status": "partial",
            "success_rate_7d": 61.9,
            "checks_7d": 21,
            "endpoint": "/scrape",
            "params": {
                "js": true,
                "wait_for": 8000
            },
            "proxy": "default",
            "measured": true,
            "max_credits": 5,
            "learned_settings": "js + wait 8000",
            "example_url": "https://www.grubhub.com/delivery/ny-new_york",
            "playground": "https://ujeebu.com/playground?endpoint=scrape&url=https%3A%2F%2Fwww.grubhub.com%2Fdelivery%2Fny-new_york&js=true&wait_for=8000&autosend=0&utm_source=site-guide",
            "recipes": [
                {
                    "page_kind": "listing",
                    "label": "Search and listing pages",
                    "validated_at": "2026-10-13T14:06:58Z",
                    "params": {
                        "js": true,
                        "wait_for": 8000
                    },
                    "extract_rules": {
                        "restaurants": {
                            "selector": "div[data-testid=\"restaurant-card\"]",
                            "type": "obj",
                            "multiple": true,
                            "children": {
                                "url": {
                                    "selector": "a[data-testid=\"restaurant-name\"]",
                                    "type": "link"
                                },
                                "title": {
                                    "selector": "a[data-testid=\"restaurant-name\"]",
                                    "type": "text"
                                },
                                "cuisine": {
                                    "selector": "span[data-testid='cuisines'] span.u-inline",
                                    "type": "text"
                                },
                                "rating": {
                                    "selector": "span.sc-fzpans.sc-fzplWN.dedqwF",
                                    "type": "text"
                                }
                            }
                        },
                        "item_list": {
                            "type": "fn",
                            "fn": "const l = [...document.querySelectorAll('script[type=\"application/ld+json\"]')].flatMap(s => { try { return [].concat(JSON.parse(s.textContent)).flatMap(x => x['@graph'] || [x]); } catch (e) { return []; } }).find(x => x && [].concat(x['@type']).includes('ItemList')); return l ? [].concat(l.itemListElement || []).map(e => ({ name: e.name ?? e.item?.name ?? null, url: e.url ?? e.item?.url ?? e.item?.['@id'] ?? null })) : null;"
                        }
                    },
                    "fields": {
                        "restaurants": "list of 3+ items",
                        "restaurants[].url": "URL",
                        "restaurants[].title": "text",
                        "restaurants[].cuisine": "text",
                        "restaurants[].rating": "text",
                        "item_list": "list of 3+ items",
                        "item_list[].name": "text",
                        "item_list[].url": "URL"
                    },
                    "validated_on": [
                        "https://www.grubhub.com/delivery/pa-philadelphia",
                        "https://www.grubhub.com/delivery/ca-los_angeles"
                    ],
                    "url_pattern": "https://www.grubhub.com/delivery/{slug}",
                    "listing_template": "https://www.grubhub.com/delivery/{query}",
                    "pagination": null
                },
                {
                    "page_kind": "detail",
                    "label": "Restaurant pages",
                    "validated_at": "2026-10-13T14:07:27Z",
                    "params": {
                        "js": true,
                        "wait_for": 8000
                    },
                    "extract_rules": {
                        "place": {
                            "type": "fn",
                            "fn": "const T = ['Hotel', 'LodgingBusiness', 'Restaurant', 'FoodEstablishment', 'LocalBusiness', 'Store', 'TouristAttraction', 'Resort', 'Motel', 'BedAndBreakfast', 'CafeOrCoffeeShop']; const n = [...document.querySelectorAll('script[type=\"application/ld+json\"]')].flatMap(s => { try { return [].concat(JSON.parse(s.textContent)).flatMap(x => x['@graph'] || [x]); } catch (e) { return []; } }).find(x => x && [].concat(x['@type']).some(t => T.includes(t))); if (!n) return null; const g = p => p.split('|').map(q => q.split('.').reduce((v, k) => v == null ? v : (Array.isArray(v) ? v[0] : v)?.[k], n)).find(v => v != null && v !== ''); const all = v => Array.isArray(v) ? v.map(all).filter(x => x != null).join(', ') : (v && typeof v === 'object' ? (v.name ?? v['@id'] ?? null) : (typeof v === 'string' ? v.replace('https://schema.org/', '').replace('http://schema.org/', '') : v ?? null)); const one = v => all(Array.isArray(v) ? v[0] : v); return { city: all(g('address.addressLocality')), country: all(g('address.addressCountry.name|address.addressCountry')), cuisine: all(g('servesCuisine')), image: one(g('image.url|image')), name: all(g('name')), postal_code: all(g('address.postalCode')), rating: all(g('aggregateRating.ratingValue')), region: all(g('address.addressRegion')), review_count: all(g('aggregateRating.reviewCount|aggregateRating.ratingCount')), street: all(g('address.streetAddress')) };"
                        },
                        "description": {
                            "selector": "meta[property=\"og:description\"]",
                            "type": "attr",
                            "attribute": "content"
                        },
                        "url": {
                            "selector": "link[rel=\"canonical\"]",
                            "type": "attr",
                            "attribute": "href"
                        }
                    },
                    "fields": {
                        "place.city": "text",
                        "place.country": "text",
                        "place.cuisine": "text",
                        "place.image": "URL",
                        "place.name": "text",
                        "place.postal_code": "number (as text)",
                        "place.rating": "number (as text)",
                        "place.region": "text",
                        "place.review_count": "number",
                        "place.street": "text",
                        "description": "text",
                        "url": "URL"
                    },
                    "validated_on": [
                        "https://www.grubhub.com/restaurant/old-english-style-pizza-6015-n-5th-st-philadelphia/4627840",
                        "https://www.grubhub.com/restaurant/bonchon-1020-cherry-st-philadelphia/2099489"
                    ],
                    "url_pattern": "https://www.grubhub.com/restaurant/{slug}/{id}",
                    "listing_template": null,
                    "pagination": null
                }
            ]
        }
    ],
    "guide_url": "https://ujeebu.com/scrape/grubhub",
    "billing": "Only HTTP 200 and 404 responses are billed.",
    "auth": "Header ApiKey: <your key>",
    "api_base": "https://api.ujeebu.com",
    "how_to_use_recipes": "POST https://api.ujeebu.com/scrape with a JSON body: url, the params, and extract_rules; the response is {\"result\": {...}}."
}