Search properties
Resolve a hotel name to candidate property tokens.
/v1/searchVerification is on by default: each candidate is checked with a calendar lookup (slower, but no extra credits; a search costs 1 credit). That is the right default for onboarding: a wrong token yields rates that are entirely plausible and belong to a different hotel. Turn it off only when a human is going to confirm the choice anyway.
Not a hot path — tokens are stable, so resolve once and store the result. Google rate-limits search more aggressively than the calendar.
Request
https://api.scrapercompany.com/v1/searchAuthenticate with your API key in the x-api-key header (see Authentication).
Body
JSON object. Unknown fields are rejected with 422.
- namestringrequired
Property name as a guest would type it. Fuzzy — exact punctuation does not matter.
- citystringdefault
Strongly recommended. Without it a common brand name matches the wrong city.
- marketstring | null
ISO country/Google market to try first, e.g.
US,MX,GD. Search accepts markets beyond the pricing markets listed byGET /v1/marketsbecause property tokens are global; the response reports where it matched.251 allowed values
AD, AE, AF, AG, AI, AL, AM, AO, AQ, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, BE, BF, BG, BH, BI, BJ, BL, BM, BN, BO, BQ, BR, BS, BT, BV, BW, BY, BZ, CA, CC, CD, CF, CG, CH, CI, CK, CL, CM, CN, CO, CR, CU, CV, CW, CX, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, EH, ER, ES, ET, FI, FJ, FK, FM, FO, FR, GA, GB, GD, GE, GF, GG, GH, GI, GL, GM, GN, GP, GQ, GR, GS, GT, GU, GW, GY, HK, HM, HN, HR, HT, HU, ID, IE, IL, IM, IN, IO, IQ, IR, IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MF, MG, MH, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM, PN, PR, PS, PT, PW, PY, QA, RE, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SR, SS, ST, SV, SX, SY, SZ, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TR, TT, TV, TW, TZ, UA, UG, UK, UM, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WF, WS, XK, YE, YT, ZA, ZM, ZW
- fallback_marketsarray of stringdefault
["US"]max items 5Markets tried in order only when the requested market returns zero candidates. Defaults to
US, which often indexes Caribbean properties absent from their local Google market. Pass[]to disable fallback. The response always reportsattempted_markets,matched_market, andmarket_fallback_used. - currencystring | null
ISO 4217 code for the returned prices. Major currencies include AED, AUD, BRL, CAD, CHF, CNY, EUR, GBP, HKD, INR, JPY, KRW, MXN, NZD, SGD, USD; all 39 supported codes are listed in the enum.
39 allowed values
AED, ARS, AUD, BRL, CAD, CHF, CLP, CNY, COP, CZK, DKK, EGP, EUR, GBP, HKD, HUF, IDR, ILS, INR, JPY, KRW, MXN, MYR, NOK, NZD, PEN, PHP, PLN, QAR, RON, SAR, SEK, SGD, THB, TRY, TWD, USD, VND, ZAR
- limitintegerdefault
5min 1, max 10Candidates to return, best match first.
- verifybooleandefault
trueFetch each candidate to confirm the token resolves and read back its real name. Slower, far fewer wrong matches.
Example request
curl -X POST "https://api.scrapercompany.com/v1/search" \
-H "x-api-key: $SCRAPERCOMPANY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Hilton Chicago",
"city": "Chicago",
"market": "US"
}'Response
200 — Candidate properties, best match first. Metered responses carry x-credits-charged and x-credits-remaining headers (see credit headers).
{
"query": "Blue Horizons Garden Resort St George's",
"gl": "us",
"requested_market": "GD",
"attempted_markets": [
"GD",
"US"
],
"matched_market": "US",
"market_fallback_used": true,
"search_status": "matched",
"external_fallback_recommended": false,
"matches": [
{
"token": "ChcI7LnnsZLasKYOGgsvZy8xdHJzejFiORAB",
"rank": 0,
"verified": true,
"name": "Blue Horizons Garden Resort",
"name_score": 1
}
]
}Response fields
Fields marked required are always present; others appear when they apply.
- querystringrequired
nameandcityas searched. - glstringrequired
Google country (
gl) of the market that matched, or of the first market tried. - requested_marketstringrequired
- attempted_marketsarray of stringrequired
Markets tried, in order, up to and including the one that matched.
- matched_marketstring | nullrequired
- market_fallback_usedbooleanrequired
- search_statusstringrequired
One of
matchednot_found - external_fallback_recommendedbooleanrequired
True when nothing matched.
- matchesarray of objectrequired
Best match first when
verifyis on (verified, then name score, then Google rank).Show 5 child fieldsHide child fields
- matches[].tokenstringrequired
Google property token; pass it as
token/property_token. - matches[].rankintegerrequired
Google's own ordering, 0 = first.
- matches[].verifiedboolean | nullrequired
Whether the token prices.
nullwhenverifywas false. - matches[].namestring | nullrequired
Property name read back from Google.
nullwhen unchecked, empty string when checked but unreadable. - matches[].name_scorenumber | nullrequired
0-1 word-overlap between the requested and real name.
nullwhen unchecked.
Errors
Errors return a JSON body with a detail field. Failed requests are not charged. See Errors for the full list and retry advice.
| Status | Meaning | Retry? |
|---|---|---|
401Unauthorized | Missing or invalid API key. {"detail":"missing or invalid API key"} | No, fix the request |
402Payment Required | Not enough credits for this request. Only returned once credit enforcement is switched on; during the beta metering runs in shadow mode and never blocks. {"detail":"insufficient credits: this request costs 5, 0 available. Credits renew 2026-11-01."} | No, fix the request |
422Unprocessable Content | Request validation failed. {"detail":[{"loc":["body","name"],"msg":"Field required","type":"missing"}]} | No, fix the request |
429Too Many Requests | Too many requests: the key's requests-per-minute limit was exceeded, or (once credit enforcement is on) the plan's concurrent-request limit. No rate-limit or Retry-After headers are sent; back off and retry. {"detail":"rate limit 60/min exceeded"} | Yes, with backoff |
502Bad Gateway | The upstream source failed, blocked the request or returned an unusable answer. Safe to retry later; failed requests are not charged. {"detail":"RuntimeError"} | Yes, with backoff |
Try it
- Export your key:
export SCRAPERCOMPANY_API_KEY=sk_...(no key yet? request access). - Copy the cURL example above and run it in a terminal.
- Or open the interactive playground on api.scrapercompany.com, paste your key and pick this endpoint.