TidyTools

Places search

POST https://tools.yukai.uk/api/v1/places/search

Find businesses in a city by category (Overture Maps). Businesses of a city or area straight from the open Overture Maps places dataset (CDLA-Permissive-2.0): name, category (and path), address, coordinates, website, phone numbers, role e-mail addresses (info@, contact@) and social links, best-scored first. No map site is scraped: no proxies, no CAPTCHAs, no blocking. Duplicates removed. Business fields only (no person names). Overture has no ratings, reviews or opening hours, and only about 1 in 5 places has an e-mail address: use /places/enriched to read each business's own website for contacts. The first search of a city takes 20-40 s while its data is prepared (answered with 504 timeout, retry in about a minute); later searches of that city take under a second.

Cost

Credits: 9 per place ($0.0009 per place). 180 credits are reserved before the call; the call is then settled on the real number of items returned. Failed calls are free. Source price: places-database/place-returned.

Input

Send a JSON body (POST) or the same fields as a query string (GET).

Required: location.

FieldTypeDefaultDescription
location requiredstringA city with its 2-letter country code (Berlin, DE, Austin, US; country names such as Lisbon, Portugal work too), or a bounding box west,south,east,north of up to 2 square degrees. Cities are cut out along their real boundary.
limitinteger10Places per call.
categorystringOne or more Overture categories, comma-separated (up to 5): restaurant, dental_clinic, real_estate_agent, hotel, attorney_or_law_firm... Plain words (dentist, lawyers) and plurals work; a parent category (food_and_drink, health_and_medical) includes everything under it. Empty = all categories. When nothing matches, hint lists the categories that exist there.
offsetinteger0Skip this many places (paging, best-scored first).
minConfidencenumber0.85Overture's confidence (0.5-1) that the place exists. Closed places are always removed.
requireWebsitebooleanfalseOnly places with a website.
requirePhonebooleanfalseOnly places with a phone number.
requireEmailbooleanfalseOnly places with a role e-mail address (info@, contact@...) in the source data.
categories
name

Examples

Replace tt_live_XXXX with your key from the pricing page.

curl

curl -i -X POST "https://tools.yukai.uk/api/v1/places/search" \
  -H "Authorization: Bearer tt_live_XXXX" \
  -H "Content-Type: application/json" \
  -d '{"location":"Berlin, DE"}'

JavaScript (fetch)

const res = await fetch("https://tools.yukai.uk/api/v1/places/search", {
  method: "POST",
  headers: { "Authorization": "Bearer tt_live_XXXX", "Content-Type": "application/json" },
  body: JSON.stringify({"location":"Berlin, DE"}),
});
console.log(res.status, res.headers.get("x-credits-charged"), res.headers.get("x-credits-balance"));
console.log(await res.json());

Python (requests)

import requests

r = requests.post(
    "https://tools.yukai.uk/api/v1/places/search",
    headers={"Authorization": "Bearer tt_live_XXXX"},
    json={"location": "Berlin, DE"},
    timeout=120,
)
print(r.status_code, r.headers.get("x-credits-charged"), r.headers.get("x-credits-balance"))
print(r.json())

Response

JSON with "success": true and the result fields; on failure {"success": false, "error": {"code", "message", "retryable"}} and no credits are used. Every answer carries x-credits-charged (credits used) and x-credits-balance (balance after the call); check the balance any time with GET https://tools.yukai.uk/v1/billing/balance.

Full field list and response schema: OpenAPI spec places (its servers entry is the marketplace gateway; call https://tools.yukai.uk with your key).

← All routes · Pricing