Local Business Database API
Local business database API - search Google Maps business listings by city, state, country, ZIP, category, name, address, or phone, inside a bounding box or around a point, and read full listing records by business ID.
- Free tier, no credit card
- Structured JSON
- Fresh within 30 days
{
"business_id": "0x880e2cb6a8034a35:0x75dbc9bf82f2c81b",
"name": "Lou Malnati's Pizzeria",
"address": "Lou Malnati's Pizzeria, 439 N Wells St, Chicago, IL 60654",
"lat": 41.8903514,
"lng": -87.6337231,
"categories": [
"Pizza restaurant",
"Pizza delivery"
],
"main_category": "Pizza restaurant",
"phone": "+1312*******",
"website": "https://www.loumalnatis.com/chicago-river-north",
"tld": "loumalnatis.com",
"status": "operational",
"rating": 4.4,
"place_id": "ChIJNUoDqLYsDogRG8jygr_J23U",
"google_mid": "/g/1tg4lzj7",
"cid": "8492603346710087707",
"place_link": "https://www.google.com/maps/place/data=!3m1!4b1!4m2!3m1!1s0x880e2cb6a…",
"timezone": "America/Chicago",
"owner_id": "107120399910289889233",
"owner_name": "Lou Malnati's Pizzeria",
"owner_link": "https://maps.google.com/maps/contrib/107120399910289889233",
"address_short": "439 N Wells St, Chicago, IL 60654",
"district": "Near North Side",
"street_address": "439 N Wells St",
"city": "Chicago",
"zipcode": "60654",
"state": "Illinois",
"country": "US",
"photo_count": 9990,
"photos_sample": [
{
"photo_id": "CIHM0ogKEICAgICk9JvJ9wE",
"photo_url": "https://lh3.googleusercontent.com/gps-cs-s/AHRPTWnB_3AHA73cwkOusDFvDN…",
"photo_url_large": "https://lh3.googleusercontent.com/gps-cs-s/AHRPTWnB_3AHA73cwkOusDFvDN…",
"latitude": 41.89034249625777,
"longitude": -87.63370339681664,
"type": "photo",
"photo_datetime_utc": "2019-01-18T20:00:00.000Z",
"photo_timestamp": 1547841600
}
],
"verified": true,
"opening_status": "Closed · Opens 11 AM Wed",
"working_hours": {
"Tuesday": [
"11 AM–11 PM"
],
"Wednesday": [
"11 AM–11 PM"
],
"Thursday": [
"11 AM–11 PM"
],
"Friday": [
"11 AM–12 AM"
],
"Saturday": [
"11 AM–12 AM"
],
"Sunday": [
"11 AM–11 PM"
],
"Monday": [
"11 AM–11 PM"
]
},
"booking_link": "https://www.google.com/searchviewer/42?cvd=CLw_EiUKI-ICIDIeEhciFdLX29…",
"order_link": "https://www.google.com/maps/reserve/v/dine/c/v1fjJKf69Cw?source=pa&op…",
"reservations_link": "https://www.opentable.com/restaurant/profile/196450?ref=1068",
"main_category_id": "pizza_restaurant",
"about": {
"summary": "Family-owned local chain for Italian classics & Chicago-style, deep-d…",
"details": {
"accessibility": {
"/geo/type/establishment_poi/has_wheelchair_accessible_entrance": true,
"/geo/type/establishment_poi/has_wheelchair_accessible_parking": false,
"/geo/type/establishment_poi/has_wheelchair_accessible_restroom": true,
"/geo/type/establishment_poi/has_wheelchair_accessible_seating": true
}
}
},
"open_24_7": false,
"review_count": 13450,
"reviews_per_rating": {
"1": 479,
"2": 394,
"3": 958,
"4": 2641,
"5": 8978
},
"category_ids": [
"pizza_restaurant",
"deliveries",
…
],
"price_level": "$20–30",
"price_tier": 2,
"menu": [
{
"title": "Lou Malnati's Pizzeria",
"sections": [
{
"title": "Thin Crust Veggie",
"menu_items": [
{
"title": "XLarge - Thin Crust Veggie",
"description": "Vine-ripened tomato sauce topped with a mixture of mushroom, onion &…",
"price": "$46.62"
},
{
"title": "Small - Thin Crust Veggie",
"description": "Vine-ripened tomato sauce topped with a mixture of mushroom, onion &…",
"price": "$25.14"
},
…
]
},
{
"title": "Deep Margherita",
"menu_items": [
{
"title": "Small - Deep Dish Margherita",
"description": "Our legendary crust, cheese and bright Lou’s tomatoes, topped with fr…",
"price": "$28.62"
},
{
"title": "Large - Deep Dish Margherita",
"description": "Our legendary crust, cheese and bright Lou’s tomatoes, topped with fr…",
"price": "$44.70"
},
…
]
},
…
]
}
],
"photo_tabs": [
"All",
"Latest",
…
],
"popular_times": [
{
"dow": 1,
"hours": [
{
"hour": 6,
"busy_pct": 0,
"wait": "No wait"
},
{
"hour": 7,
"busy_pct": 0,
"wait": "No wait"
},
…
]
},
{
"dow": 2,
"hours": [
{
"hour": 6,
"busy_pct": 0,
"wait": "No wait"
},
{
"hour": 7,
"busy_pct": 0,
"wait": "No wait"
},
…
]
},
…
],
"first_seen": "2026-08-17T07:38:53.271Z",
"last_seen": "2026-09-07T15:41:06.042Z",
"last_changed": "2026-09-07T15:41:06.042Z"
}Data samples
What the Local Business Database API returns
Real responses for each kind of object the API provides. Pick an object type to inspect its fields.
{
"business_id": "0x880e2cb6a8034a35:0x75dbc9bf82f2c81b",
"name": "Lou Malnati's Pizzeria",
"address": "Lou Malnati's Pizzeria, 439 N Wells St, Chicago, IL 60654",
"lat": 41.8903514,
"lng": -87.6337231,
"categories": [
"Pizza restaurant",
"Pizza delivery"
],
"main_category": "Pizza restaurant",
"phone": "+1312*******",
"website": "https://www.loumalnatis.com/chicago-river-north",
"tld": "loumalnatis.com",
"status": "operational",
"rating": 4.4,
"place_id": "ChIJNUoDqLYsDogRG8jygr_J23U",
"google_mid": "/g/1tg4lzj7",
"cid": "8492603346710087707",
"place_link": "https://www.google.com/maps/place/data=!3m1!4b1!4m2!3m1!1s0x880e2cb6a8034a35:0x75dbc9bf82f2c81b",
"timezone": "America/Chicago",
"owner_id": "107120399910289889233",
"owner_name": "Lou Malnati's Pizzeria",
"owner_link": "https://maps.google.com/maps/contrib/107120399910289889233",
"address_short": "439 N Wells St, Chicago, IL 60654",
"district": "Near North Side",
"street_address": "439 N Wells St",
"city": "Chicago",
"zipcode": "60654",
"state": "Illinois",
"country": "US",
"photo_count": 9990,
"photos_sample": [
{
"photo_id": "CIHM0ogKEICAgICk9JvJ9wE",
"photo_url": "https://lh3.googleusercontent.com/gps-cs-s/AHRPTWnB_3AHA73cwkOusDFvDNJ6QV8I8KAY-sHcrF3wUmtCeSDVULmzx8JqjgHkRlnmmjhTcke4q5h7VwTEa4S30ZXXgI7FCLkwPovdEA8OzkalLhUhMsOZZ1tcP50rgYMri2nqg2glbQ",
"photo_url_large": "https://lh3.googleusercontent.com/gps-cs-s/AHRPTWnB_3AHA73cwkOusDFvDNJ6QV8I8KAY-sHcrF3wUmtCeSDVULmzx8JqjgHkRlnmmjhTcke4q5h7VwTEa4S30ZXXgI7FCLkwPovdEA8OzkalLhUhMsOZZ1tcP50rgYMri2nqg2glbQ=w4032-h3024-k-no",
"video_thumbnail_url": null,
"latitude": 41.89034249625777,
"longitude": -87.63370339681664,
"type": "photo",
"photo_datetime_utc": "2019-01-18T20:00:00.000Z",
"photo_timestamp": 1547841600
}
],
"verified": true,
"opening_status": "Closed · Opens 11 AM Wed",
"working_hours": {
"Tuesday": [
"11 AM–11 PM"
],
"Wednesday": [
"11 AM–11 PM"
],
"Thursday": [
"11 AM–11 PM"
],
"Friday": [
"11 AM–12 AM"
],
"Saturday": [
"11 AM–12 AM"
],
"Sunday": [
"11 AM–11 PM"
],
"Monday": [
"11 AM–11 PM"
]
},
"booking_link": "https://www.google.com/searchviewer/42?cvd=CLw_EiUKI-ICIDIeEhciFdLX29IPDwoLL2cvMXRnNGx6ajcYADoDCPAN&gsas=1&hl=en&gl=us&fo_m=MfohQo559jFvMUOzJVpjPL1YMfZ3bInYwBDuMfaXTPp5KXh-&utm_source=search&gei=E6iXavv6B9eA48cP5JvuoQw&ei=E6iXavv6B9eA48cP5JvuoQw&fo_s=OA,SOE&opi=89978449&ebb=1&foub=mcpp",
"order_link": "https://www.google.com/maps/reserve/v/dine/c/v1fjJKf69Cw?source=pa&opi=79508299&hl=en-US&gei=D9ueat6bMKSfseMP-4K_yQ0&ahbb=1&sourceurl=https://www.google.com/search?uule%3Da%2Bcm9sZToxCnByb2R1Y2VyOjEyCnByb3ZlbmFuY2U6MAp0aW1lc3RhbXA6MApsYXRsbmd7CmxhdGl0dWRlX2U3OjQxODg4NjcxOApsb25naXR1ZGVfZTc6LTg3NjM0NzY1Ngp9CnJhZGl1czotMQ%253D%253D%26tbm%3Dmap%26authuser%3D0%26hl%3Den%26gl%3Dus%26pb%3D!4m9!1m3!1d1891.4781405389904!2d-87.634765625!3d41.888671875!2m0!3m2!1i744!2i1000!4f13.1!7i500!10b1!12m26!1m5!18b1!30b1!31m1!1b1!34e1!2m4!5m1!6e2!20e3!39b1!10b1!12b1!13b1!16b1!17m1!3e1!20m4!5e2!6b1!8b1!14b1!46m1!1b0!96b1!99b1!19m4!2m3!1i360!2i120!4i8!20m65!2m2!1i203!2i100!3m2!2i4!5b1!6m6!1m2!1i86!2i86!1m2!1i408!2i240!7m33!1m3!1e1!2b0!3e3!1m3!1e2!2b1!3e2!1m3!1e2!2b0!3e3!1m3!1e8!2b0!3e3!1m3!1e10!2b0!3e3!1m3!1e10!2b1!3e2!1m3!1e10!2b0!3e4!1m3!1e9!2b1!3e2!2b1!9b0!15m16!1m7!1m2!1m1!1e2!2m2!1i195!2i195!3i20!1m7!1m2!1m1!1e2!2m2!1i195!2i195!3i20!22m6!1sBVW-acy_OaKC9u8Pyuef2Qg:3!2s1i:0,t:11886,p:BVW-acy_OaKC9u8Pyuef2Qg:3!7e81!12e5!17sBVW-acy_OaKC9u8Pyuef2Qg:61!18e15!24m109!1m27!13m9!2b1!3b1!4b1!6i1!8b1!9b1!14b1!20b1!25b1!18m16!3b1!4b1!5b1!6b1!9b1!13b1!14b1!17b1!20b1!21b1!22b1!32b1!33m1!1b1!34b1!36e2!10m1!8e3!11m1!3e1!17b1!20m2!1e3!1e6!24b1!25b1!26b1!27b1!29b1!30m1!2b1!36b1!37b1!39m3!2m2!2i1!3i1!43b1!52b1!54m1!1b1!55b1!56m1!1b1!61m2!1m1!1e1!65m5!3m4!1m3!1m2!1i224!2i298!72m22!1m8!2b1!5b1!7b1!12m4!1b1!2b1!4m1!1e1!4b1!8m10!1m6!4m1!1e1!4m1!1e3!4m1!1e4!3sother_user_google_review_posts__and__hotel_and_vr_partner_review_posts!6m1!1e1!9b1!89b1!90m2!1m1!1e2!98m3!1b1!2b1!3b1!103b1!113b1!114m3!1b1!2m1!1b1!117b1!122m1!1b1!126b1!127b1!128m1!1b0!26m4!2m3!1i80!2i92!4i8!30m28!1m6!1m2!1i0!2i0!2m2!1i530!2i1000!1m6!1m2!1i694!2i0!2m2!1i744!2i1000!1m6!1m2!1i0!2i0!2m2!1i744!2i20!1m6!1m2!1i0!2i980!2m2!1i744!2i1000!34m19!2b1!3b1!4b1!6b1!8m6!1b1!3b1!4b1!5b1!6b1!7b1!9b1!12b1!14b1!20b1!23b1!25b1!26b1!31b1!37m1!1e81!42b1!47m0!49m10!3b1!6m2!1b1!2b1!7m2!1e3!2b1!8b1!9b1!10e2!50m4!2e2!3m2!1b1!3b1!67m5!7b1!10b1!14b1!15m1!1b0!69i771!77b1%26q%3Drestaurant",
"reservations_link": "https://www.opentable.com/restaurant/profile/196450?ref=1068",
"main_category_id": "pizza_restaurant",
"about": {
"summary": "Family-owned local chain for Italian classics & Chicago-style, deep-dish pizzas with buttery crusts.",
"details": {
"accessibility": {
"/geo/type/establishment_poi/has_wheelchair_accessible_entrance": true,
"/geo/type/establishment_poi/has_wheelchair_accessible_parking": false,
"/geo/type/establishment_poi/has_wheelchair_accessible_restroom": true,
"/geo/type/establishment_poi/has_wheelchair_accessible_seating": true
}
}
},
"open_24_7": false,
"review_count": 13450,
"reviews_per_rating": {
"1": 479,
"2": 394,
"3": 958,
"4": 2641,
"5": 8978
},
"category_ids": [
"pizza_restaurant",
"deliveries",
"eatery",
"establishment",
"establishment_poi",
"fast_food_container",
"feature",
"food",
"food_and_drink",
"food_delivery",
"meal_delivery",
"pizza_delivery_service",
"pizzas",
"public_api_establishment",
"restaurant",
"restaurant_or_cafe",
"western_food"
],
"price_level": "$20–30",
"price_tier": 2,
"menu": [
{
"title": "Lou Malnati's Pizzeria",
"description": null,
"sections": [
{
"title": "Thin Crust Veggie",
"description": null,
"menu_items": [
{
"title": "XLarge - Thin Crust Veggie",
"description": "Vine-ripened tomato sauce topped with a mixture of mushroom, onion & green pepper, and mozzarella cheese.",
"price": "$46.62",
"options": null
},
{
"title": "Small - Thin Crust Veggie",
"description": "Vine-ripened tomato sauce topped with a mixture of mushroom, onion & green pepper, and mozzarella cheese.",
"price": "$25.14",
"options": null
},
{
"title": "Large - Thin Crust Veggie",
"description": "Vine-ripened tomato sauce topped with a mixture of mushroom, onion & green pepper, and mozzarella cheese.",
"price": "$39.90",
"options": null
}
]
},
{
"title": "Deep Margherita",
"description": null,
"menu_items": [
{
"title": "Small - Deep Dish Margherita",
"description": "Our legendary crust, cheese and bright Lou’s tomatoes, topped with fresh mozzarella, baked to perfection, finished with housemade basil pesto.",
"price": "$28.62",
"options": null
},
{
"title": "Large - Deep Dish Margherita",
"description": "Our legendary crust, cheese and bright Lou’s tomatoes, topped with fresh mozzarella, baked to perfection, finished with housemade basil pesto.",
"price": "$44.70",
"options": null
},
{
"title": "Personal - Deep Dish Margherita",
"description": "Our legendary crust, cheese and bright Lou’s tomatoes, topped with fresh mozzarella, baked to perfection, finished with housemade basil pesto.",
"price": "$18.30",
"options": null
}
]
},
{
"title": "Deep Dish The Lou",
"description": null,
"menu_items": [
{
"title": "Large - Deep Dish The Lou",
"description": "A pizza so good we gave it his name! Spinach mix (enhanced with garlic, basil & onion), mushrooms and sliced Roma tomatoes covered with three cheeses, on a garlic Buttercrust™.",
"price": "$48.54",
"options": null
},
{
"title": "Small - Deep Dish The Lou",
"description": "A pizza so good we gave it his name! Spinach mix (enhanced with garlic, basil & onion), mushrooms and sliced Roma tomatoes covered with three cheeses, on a garlic Buttercrust™.",
"price": "$31.14",
"options": null
},
{
"title": "Personal - Deep Dish The Lou",
"description": "A pizza so good we gave it his name! Spinach mix (enhanced with garlic, basil & onion), mushrooms and sliced Roma tomatoes covered with three cheeses, on a garlic Buttercrust™.",
"price": "$18.54",
"options": null
}
]
}
]
}
],
"photo_tabs": [
"All",
"Latest",
"Menu",
"Food & drink",
"Vibe",
"Tiramisu",
"Pizza",
"Beer",
"Chicken Wings",
"Bruschetta",
"Greek salad",
"Mozzarella sticks",
"Caesar salad",
"Garlic bread",
"Street View & 360°",
"Videos"
],
"popular_times": [
{
"dow": 1,
"hours": [
{
"hour": 6,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 7,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 8,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 9,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 10,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 11,
"busy_pct": 15,
"label": "Usually not busy",
"wait": "No wait"
},
{
"hour": 12,
"busy_pct": 21,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 13,
"busy_pct": 26,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 14,
"busy_pct": 29,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 15,
"busy_pct": 31,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 16,
"busy_pct": 34,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 17,
"busy_pct": 42,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 18,
"busy_pct": 54,
"label": "Usually not too busy",
"wait": "Up to 15 min wait"
},
{
"hour": 19,
"busy_pct": 59,
"label": "Usually not too busy",
"wait": "Up to 15 min wait"
},
{
"hour": 20,
"busy_pct": 54,
"label": "Usually not too busy",
"wait": "Up to 15 min wait"
},
{
"hour": 21,
"busy_pct": 38,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 22,
"busy_pct": 24,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 23,
"busy_pct": 0,
"label": null,
"wait": "No wait"
}
]
},
{
"dow": 2,
"hours": [
{
"hour": 6,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 7,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 8,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 9,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 10,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 11,
"busy_pct": 15,
"label": "Usually not busy",
"wait": "No wait"
},
{
"hour": 12,
"busy_pct": 21,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 13,
"busy_pct": 23,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 14,
"busy_pct": 25,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 15,
"busy_pct": 25,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 16,
"busy_pct": 31,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 17,
"busy_pct": 40,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 18,
"busy_pct": 50,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 19,
"busy_pct": 53,
"label": "Usually a little busy",
"wait": "No wait"
},
{
"hour": 20,
"busy_pct": 47,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 21,
"busy_pct": 33,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 22,
"busy_pct": 20,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 23,
"busy_pct": 0,
"label": null,
"wait": "Usually no wait"
}
]
},
{
"dow": 3,
"hours": [
{
"hour": 6,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 7,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 8,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 9,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 10,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 11,
"busy_pct": 16,
"label": "Usually not busy",
"wait": "No wait"
},
{
"hour": 12,
"busy_pct": 22,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 13,
"busy_pct": 25,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 14,
"busy_pct": 26,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 15,
"busy_pct": 26,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 16,
"busy_pct": 30,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 17,
"busy_pct": 40,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 18,
"busy_pct": 51,
"label": "Usually a little busy",
"wait": "No wait"
},
{
"hour": 19,
"busy_pct": 57,
"label": "Usually a little busy",
"wait": "No wait"
},
{
"hour": 20,
"busy_pct": 54,
"label": "Usually a little busy",
"wait": "No wait"
},
{
"hour": 21,
"busy_pct": 43,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 22,
"busy_pct": 27,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 23,
"busy_pct": 0,
"label": null,
"wait": "No wait"
}
]
},
{
"dow": 4,
"hours": [
{
"hour": 6,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 7,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 8,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 9,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 10,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 11,
"busy_pct": 18,
"label": "Usually not busy",
"wait": "No wait"
},
{
"hour": 12,
"busy_pct": 23,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 13,
"busy_pct": 26,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 14,
"busy_pct": 29,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 15,
"busy_pct": 30,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 16,
"busy_pct": 36,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 17,
"busy_pct": 45,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 18,
"busy_pct": 58,
"label": "Usually not too busy",
"wait": "Up to 15 min wait"
},
{
"hour": 19,
"busy_pct": 65,
"label": "Usually not too busy",
"wait": "Up to 15 min wait"
},
{
"hour": 20,
"busy_pct": 68,
"label": "Usually not too busy",
"wait": "Up to 15 min wait"
},
{
"hour": 21,
"busy_pct": 57,
"label": "Usually not too busy",
"wait": "Up to 15 min wait"
},
{
"hour": 22,
"busy_pct": 41,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 23,
"busy_pct": 0,
"label": null,
"wait": "No wait"
}
]
},
{
"dow": 5,
"hours": [
{
"hour": 6,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 7,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 8,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 9,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 10,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 11,
"busy_pct": 18,
"label": "Usually not busy",
"wait": "No wait"
},
{
"hour": 12,
"busy_pct": 29,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 13,
"busy_pct": 38,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 14,
"busy_pct": 40,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 15,
"busy_pct": 41,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 16,
"busy_pct": 46,
"label": "Usually not too busy",
"wait": "Up to 15 min wait"
},
{
"hour": 17,
"busy_pct": 59,
"label": "Usually not too busy",
"wait": "Up to 15 min wait"
},
{
"hour": 18,
"busy_pct": 74,
"label": "Usually busy",
"wait": "Up to 30 min wait"
},
{
"hour": 19,
"busy_pct": 86,
"label": "Usually busy",
"wait": "Up to 30 min wait"
},
{
"hour": 20,
"busy_pct": 86,
"label": "Usually busy",
"wait": "Up to 30 min wait"
},
{
"hour": 21,
"busy_pct": 75,
"label": "Usually busy",
"wait": "Up to 30 min wait"
},
{
"hour": 22,
"busy_pct": 57,
"label": "Usually not too busy",
"wait": "Up to 15 min wait"
},
{
"hour": 23,
"busy_pct": 37,
"label": "Usually not too busy",
"wait": "No wait"
}
]
},
{
"dow": 6,
"hours": [
{
"hour": 6,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 7,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 8,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 9,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 10,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 11,
"busy_pct": 25,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 12,
"busy_pct": 37,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 13,
"busy_pct": 47,
"label": "Usually not too busy",
"wait": "Up to 15 min wait"
},
{
"hour": 14,
"busy_pct": 56,
"label": "Usually not too busy",
"wait": "Up to 15 min wait"
},
{
"hour": 15,
"busy_pct": 60,
"label": "Usually not too busy",
"wait": "Up to 15 min wait"
},
{
"hour": 16,
"busy_pct": 66,
"label": "Usually busy",
"wait": "Up to 30 min wait"
},
{
"hour": 17,
"busy_pct": 77,
"label": "Usually busy",
"wait": "Up to 45 min wait"
},
{
"hour": 18,
"busy_pct": 90,
"label": "Usually busy",
"wait": "Up to 45 min wait"
},
{
"hour": 19,
"busy_pct": 100,
"label": "Usually busy",
"wait": "Up to 45 min wait"
},
{
"hour": 20,
"busy_pct": 98,
"label": "Usually busy",
"wait": "Up to 45 min wait"
},
{
"hour": 21,
"busy_pct": 85,
"label": "Usually busy",
"wait": "Up to 30 min wait"
},
{
"hour": 22,
"busy_pct": 63,
"label": "Usually not too busy",
"wait": "Up to 15 min wait"
},
{
"hour": 23,
"busy_pct": 40,
"label": "Usually not too busy",
"wait": "Up to 15 min wait"
}
]
},
{
"dow": 7,
"hours": [
{
"hour": 6,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 7,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 8,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 9,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 10,
"busy_pct": 0,
"label": null,
"wait": "No wait"
},
{
"hour": 11,
"busy_pct": 16,
"label": "Usually not busy",
"wait": "No wait"
},
{
"hour": 12,
"busy_pct": 23,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 13,
"busy_pct": 31,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 14,
"busy_pct": 37,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 15,
"busy_pct": 41,
"label": "Usually not too busy",
"wait": "Up to 15 min wait"
},
{
"hour": 16,
"busy_pct": 47,
"label": "Usually not too busy",
"wait": "Up to 15 min wait"
},
{
"hour": 17,
"busy_pct": 55,
"label": "Usually not too busy",
"wait": "Up to 15 min wait"
},
{
"hour": 18,
"busy_pct": 61,
"label": "Usually not too busy",
"wait": "Up to 15 min wait"
},
{
"hour": 19,
"busy_pct": 61,
"label": "Usually not too busy",
"wait": "Up to 15 min wait"
},
{
"hour": 20,
"busy_pct": 53,
"label": "Usually not too busy",
"wait": "Up to 15 min wait"
},
{
"hour": 21,
"busy_pct": 41,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 22,
"busy_pct": 25,
"label": "Usually not too busy",
"wait": "No wait"
},
{
"hour": 23,
"busy_pct": 0,
"label": null,
"wait": "No wait"
}
]
}
],
"first_seen": "2026-08-17T07:38:53.271Z",
"last_seen": "2026-09-07T15:41:06.042Z",
"last_changed": "2026-09-07T15:41:06.042Z"
}{
"review_id": "Ci9DQUlRQUNvZENodHljRjlvT2tkUE1HOWpkVFJoY1VaVlVTMDFZbnB6VTBGemNuYxAB",
"rating": 5,
"review_text": "Amazing first experience with deep dish pizza. The crust was truly worth the trip from Toronto all on its own! The ravioli were heavenly. So much so that we ordered seconds. Sam our server was delightful. She was helpful with our questions about the city and was warm and welcoming. Thanks Sam!!!!!!",
"review_language": "en",
"review_text_translated": null,
"review_text_translated_language": null,
"review_datetime_utc": "2026-07-27T01:46:00.989Z",
"review_timestamp": 1785116760,
"review_time": "a month ago",
"review_link": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT2tkUE1HOWpkVFJoY1VaVlVTMDFZbnB6VTBGemNuYxAB!2m1!1s0x0:0x75dbc9bf82f2c81b!3m1!1s2@1:CAIQACodChtycF9oOkdPMG9jdTRhcUZVUS01YnpzU0Fzcnc%7C%7C?hl=en-US",
"review_photos": [
"https://lh3.googleusercontent.com/grass-cs/ACvplmNhCxrujIN1Mja-UZ7kWz69UpUKuQp-Szc6WwkA8HeTSQrQHq5VjdYTTEcCnq8uy_U7KLe4m2LXJxn0wGBYQ2Ezqpf9M97LZvClDyQDCwwLvw93MvSRtNtf4gj-oNPpE7xjrkI-w_RCfL0=k-no",
"https://lh3.googleusercontent.com/grass-cs/ACvplmP2MHHQqA-kS6chU-P4E5-MJw9bPxk7zjbAubDspSaUfmZfbjSdkRqIOUdeJBRJ9VNdOPtXZPgnnmxjUruKm4k_RgqAqzAca33tqNR44E0Ck0qmGeeXlRR41yKinPDhJQbzJum2M9zVm8T7=k-no",
"https://lh3.googleusercontent.com/grass-cs/ACvplmMsR2h4-QK0t5aRwSv2slUC-G5YSn43EtjI7OiwmQ1utTzgcj1jSKcyAnU6yKW9qVxyv6NSQrmbGo57vzKC2KCUrR9bugVZ7LeO_aTjxr2lhffm3Vq6W93HCzE-UrhQKV3RdiDUkKBbXQMI=k-no"
],
"like_count": 1,
"author_id": "104071070725864559492",
"author_link": "https://www.google.com/maps/contrib/104071070725864559492/reviews?hl=en-US",
"author_name": "WORLDYWINGS",
"author_photo_url": "https://lh3.googleusercontent.com/a/ACg8ocK0TxQ6kgFXUrp4w3BTeJ8KQ8J3u0VV8WAeGdZCF9eHHfqJZw=s64-c-rp-mo-ba12-br100",
"author_review_count": 69,
"author_photo_count": 13,
"author_reviews_link": "https://www.google.com/maps/contrib/104071070725864559492/reviews?hl=en-US",
"author_is_local_guide": true,
"owner_response_text": "Thank you for taking the time to share your wonderful experience! We're thrilled you enjoyed our deep dish pizza and ravioli. Sam and our entire team appreciate your kind words and are delighted we could make your visit memorable. We'd love to welcome you back soon! -Lou's Guest Services",
"owner_response_time": "a month ago",
"owner_response_language": null,
"service_quality": {
"Food": 5,
"Service": 5,
"Atmosphere": 4
},
"review_form": {
"Order type": "Dine in",
"Price per person": "$30–40",
"Food": 5,
"Service": 5,
"Atmosphere": 4,
"Group size": "1 person,2 people,3-4 people,5-8 people",
"Wait time": "No wait"
},
"review_source": "Google",
"review_source_logo": "https://www.gstatic.com/images/branding/product/1x/googleg_48dp.png"
}{
"photo_id": "CIABIhDSvQ5D0Q-J8ECj5i8ONwfv",
"photo_url": "https://lh3.googleusercontent.com/gps-cs-s/AHRPTWkC0gMMqYTxwmhGPo2q0KoVRhWx7iFzPOQlpZGFSvYDFeuY4RbkccT-UgGFaoC2-LqUcodJyczVp-eLd_whzd1AD4PFFr4iJA7fFLnbg7owaP0JQTMf7GNcEwSEBdONcWbKW6vE9fjKUE0",
"photo_url_large": "https://lh3.googleusercontent.com/gps-cs-s/AHRPTWkC0gMMqYTxwmhGPo2q0KoVRhWx7iFzPOQlpZGFSvYDFeuY4RbkccT-UgGFaoC2-LqUcodJyczVp-eLd_whzd1AD4PFFr4iJA7fFLnbg7owaP0JQTMf7GNcEwSEBdONcWbKW6vE9fjKUE0=w4080-h3072-k-no",
"video_thumbnail_url": null,
"latitude": 41.8903582,
"longitude": -87.63402649999999,
"type": "photo",
"photo_datetime_utc": "2025-10-19T15:00:00.000Z",
"photo_timestamp": 1760886000
}Key features and capabilities
What the Local Business Database API supports out of the box.
- Filter by city, state, country, ZIP code, district, street address, category, phone or business ID, and pass several values to any filter at once.
- Match on business name or address with text search, combined with any field filter in a single request.
- Search inside a map area: two opposite corners of a bounding box, or a center point and a radius in meters.
- Every query returns the exact number of matches for the whole result set, not just the page you were handed, and a cursor pages through it at up to 500 listings per request.
- Read the full record of up to 500 listings in one Business Details call, including the menu, popular times, services and price tier that a search response does not carry.
- Queries answer from a pre-built index rather than a live crawl, so results come back in 1 to 5 seconds, depending on the number of businesses queried.
- Every listing is refreshed on a 30-day cycle, and each record carries first_seen, last_seen and last_changed timestamps.
Docs and code
Integrate in minutes, in any language
Full reference in the API docs, and a live playground on the developer portal. Code samples for cURL, Python, Node.js, PHP, Go, Java, C# and more.
import requests
headers = {
"x-api-key": "YOUR_API_KEY"
}
response = requests.request(
'GET',
'https://api.openwebninja.com/local-business-database/search',
params={"city":"Chicago","categories":"Restaurant"},
headers=headers
)Why this API
Why teams choose the OpenWeb Ninja Local Business Database API
We keep it fast and reliable every day, and we keep adding what customers ask for.
Comprehensive
Query Google Maps business listings by name, address, category, location, phone and business ID, and read back records with coordinates, categories, contact details, rating, review count, opening hours and verification status.
Reliable
Every query answers from the same stored listings, so the same request returns the same page. Cursor pagination walks a large result set without duplicates or gaps.
Lightning Fast
Queries answer from an index instead of a crawl at request time, so a page of listings and the exact match count come back in 1 to 5 seconds, depending on the number of businesses queried.
Scalable
Page through large result sets with a stable cursor, and combine filters to slice a country, a state, a city or a single map area. Custom volume and rate limits are available on request.
Freshness
No listing in the index goes more than a month without being re-crawled, and every record carries first_seen, last_seen and last_changed, so you can check the age of any row yourself.
Free Tier
Start with 500 free businesses per month to test your integration and explore the data. No credit card required.
Pricing
Simple plans, free to start
Every plan uses the same endpoints and data. Need a custom volume, a higher rate limit, a hard cap or an SLA? Talk to us.
Ultra
$75/mo- Overage
- $0.001 / business
- Rate limit
- 8 req/sec
Prices in USD. Subscribe on the OpenWeb Ninja portal, or on RapidAPI. Cancel anytime.
What is the Local Business Database API?
It is a search API over Google Maps business listings. You query the listings by fields such as city, state, country, ZIP code, category, name, address or phone, or inside a map area, and read back a page of matching businesses together with the exact number of matches. A separate Business Details endpoint reads the full record of a listing by its identifier.
How fresh is the data?
Every listing is refreshed on a 30-day cycle, so the records you query are at most about a month old. Because Local Business Database answers from crawled listings rather than looking a business up at the moment you ask, a change made minutes ago will not be reflected yet. Every record carries first_seen, last_seen and last_changed timestamps, so you can check the age of any row yourself. If you need a live read of a single business at the instant you ask, use the separate Local Business Data API, which queries Google Maps in real time - a different product, despite the near-identical name.
How is this different from the Local Business Data API?
Local Business Data and Local Business Database are two products, one word apart. Local Business Data reads Google Maps live, a lookup at a time, so it is current to the second. Local Business Database answers set queries over stored listings, re-crawled every 30 days, and returns in 1 to 5 seconds, depending on the number of businesses queried, because nothing is fetched at request time. Use it for questions like every dentist in Texas or every cafe inside a map box: you get the exact number of matches for the whole query and a cursor that pages through the full result set.
Can I search inside a map area?
Yes. Area Search By Bounding Box takes the two opposite corners of a box, and Area Search By Radius takes a center point and a radius of up to 100,000 meters. Both accept the same field filters as a plain search, so you can ask for one category inside one area.
How does pagination work?
A response returns up to 500 businesses and the exact number of matches for the whole query, which is larger than the page whenever the total exceeds your limit. If the page was full, the response also carries an opaque cursor; send it back with the same query to read the next page. When there is no cursor, you have reached the end of the results.
What does my monthly allowance count?
Monthly allowances are counted in businesses. The Free plan includes 500 businesses per month, Pro 20,000, Ultra 100,000 and Mega 300,000, and Pay As You Go is priced at $0.004 per business.
Do you offer higher volume or custom plans?
Yes. Email support@openwebninja.com with your expected monthly volume and any requirements, and we will put a custom plan together for you.
How do I subscribe and start calling the API?
Click "Try for Free" at the top of this page to sign up on the OpenWeb Ninja developer portal and subscribe to a plan. Calls are authenticated with your key in the x-api-key header, and the free tier needs no credit card.
Start using the Local Business Database API today
Free tier included, no credit card required. Your first response is a minute away.