Hotel Mapping API
# Every OTA gives the same hotel a different name and ID.

Map a hotel name to its canonical page on **Booking, Agoda, Expedia, TripAdvisor, Priceline, Trip.com, KAYAK** and others — discover every link a property has, geocode any place, and turn matched pages into IDs you can pull rates, reviews and photos with.

REQUESTGET

USE&nbsp;CASEResolve a hotel name to its canonical page on one OTA — here, Booking.com.

```
curl "https://api.stayapi.com/v1/meta/match" \
  -G \
  -H "x-api-key: $STAYAPI_KEY" \
  -d "name=conrad tokyo" \
  -d "platform=booking"
```

USE&nbsp;CASEOne call: every link a property has across the major OTAs, plus its official website.

```
curl "https://api.stayapi.com/v1/meta/search" \
  -G \
  -H "x-api-key: $STAYAPI_KEY" \
  -d "hotel_name=Conrad Tokyo" \
  -d "location=Tokyo"
```

USE&nbsp;CASETurn any place name into coordinates for StayAPI's geo-search endpoints.

```
curl "https://api.stayapi.com/v1/meta/coordinates-lookup" \
  -G \
  -H "x-api-key: $STAYAPI_KEY" \
  -d "term=Shiodome, Tokyo"
```

RESPONSE200 OK
1.4s

```
{
  "success": true,
  "query": {
    "name": "conrad tokyo",
    "platform": "booking"
  },
  "match": {
    "title": "Conrad Tokyo",
    "url": "https://www.booking.com/hotel/jp/conrad-tokyo.html"
  }
}
```

```
{
  "success": true,
  "hotel_name": "Conrad Tokyo",
  "location": "Tokyo",
  "links": {
    "booking_com": "https://booking.com/hotel/jp/conrad-tokyo.html",
    "expedia": "https://expedia.com/Tokyo-Hotels-Conrad-Tokyo.h1199553",
    "tripadvisor": "https://tripadvisor.com/Hotel_Review-d508158",
    "agoda": "https://agoda.com/conrad-tokyo/hotel/tokyo-jp.html",
    "official_website": "https://hilton.com/en/hotels/tyocici-conrad-tokyo/"
  },
  "metadata": { "total_results_found": 8 }
}
```

```
{
  "success": true,
  "query": "shiodome, tokyo",
  "total": 1,
  "locations": [
    {
      "name": "Shiodome, Minato City, Tokyo, Japan",
      "type": "neighborhood",
      "latitude": 35.6626,
      "longitude": 139.7591,
      "country": "JP"
    }
  ]
}
```

[Sign up, get keys](/users/sign_up)[Read the docs](/docs/endpoints/meta-match)

✓ **6+** OTA match targets✓ URL → ID converters✓ **50** free requests

Trusted by teams at

 ![EHL](/assets/logos/ehl-51e6ac832bd7a1b8c1f3c17ea48e7f7464f2aaead02a54b7cab2f2ee05b06c86.png) ![Skyscanner](/assets/logos/skyscanner-47f9fed400d4f828b0499892968e393aa1435240b8a573988d36fceb7f0433ae.png) ![Mews](/assets/logos/mews-e52288ca26c3e8d5e3878b522b92b521916a7df9c07556910102ad7bebbd216b.svg) ![CBRE](/assets/logos/cbre-f38211cf61a47f45d021ab25957f592fb2043bcff716539e3f2f54fd7fde91be.png) ![Ripe](/assets/logos/ripe-9fec989e25c3a18f2fec0357610bc743f12bf0e96cfa4824f457c4aa2c95db60.svg)

The identity problem
## Hotel data joins break on identity. We match them back together.

### Four names, one building.

Legal names, trade names, rebrands, diacritics, transliterations. "Hôtel Le Grand" on one OTA is "Le Grand Hotel Paris" on the next — and a fuzzy string compare calls them different properties.

### IDs never line up.

Booking's 123456 has nothing to do with Expedia's 78901234, and an ID that means one hotel on one OTA can mean a different hotel on another. Without namespacing, collisions are silent.

### Bad joins make bad analytics.

Rate comparisons against the wrong property. Review rollups mixing two hotels. Every downstream number inherits the identity error, and nobody notices until a customer does.

### Manual reconciliation doesn't scale.

Onboarding a new supplier or portfolio means someone eyeballing spreadsheets, property by property. Fine at 50 hotels. A quarter of lost weekends at 5,000.

[Sign up, get keys](/users/sign_up)[See it in action](#before-after)

The toolkit
## Match, discover, geocode — then pull the data.

### Match: name → canonical page.

Give [/v1/meta/match](/docs/endpoints/meta-match) a hotel name and a platform; get the canonical hotel page back, validated against strict URL patterns and cleaned of SEO noise.

### Discover: every link at once.

One [/v1/meta/search](/docs/endpoints/meta-search) call discovers links from major OTAs, the big chains — and the property's own official website.

### Geocode: text → coordinates.

City, neighborhood or landmark into [/v1/meta/coordinates-lookup](/docs/endpoints/meta-coordinates-lookup); name, type, country and lat/lng out — ready for StayAPI's geo-search endpoints.

### Convert: URL → native ID.

Booking, Agoda and VRBO converters turn a matched URL into the platform's own ID — the key that unlocks rates, reviews, rooms and photos on every data endpoint.

From mess to matched
## Messy names in. Matched links out.

Feed the match endpoints the names you already have — PMS exports, supplier CSVs, CRM records. Back comes the canonical page per OTA, cleaned and validated. No confident match? An explicit no-match, never a guess.

BEFORE — supplier\_export.csv

```
id_204;CONRAD TOKYO HOTEL;;JP
bkg-1199553;Conrad Tokyo;booking;JP
EXP_90482;CONRAD TOKYO (SHIODOME);expedia;
ta_d508158;Conrad Tokyo Hotel;tripadvisor;JP
id_982;Conrad, Tokyo Shiodome;;JP
agd_44720;Conrad Tokyo, Minato;agoda;JP
id_413;コンラッド東京;Minato-ku;JP
id_764;Conrad Tokyo (ex. Shiodome);;JP
```

AFTER — one property, matchedMATCHED

```
{
  "name": "Conrad Tokyo",
  "links": {
    "booking_com": "…/hotel/jp/conrad-tokyo.html",
    "expedia": "…h1199553",
    "tripadvisor": "…d508158",
    "agoda": "…/conrad-tokyo/hotel/tokyo-jp.html",
    "official_website": "hilton.com/…conrad-tokyo/"
  }
}
```

Into your stack
## Put it where your team works.

✓&nbsp;SHEETS&nbsp;&nbsp;✓&nbsp;BI&nbsp;&nbsp;✓&nbsp;CRM

### Plain JSON pipes anywhere.

Matched links and IDs are plain JSON — pipe them into **Google Sheets, BigQuery, Power BI, Snowflake, Postgres** or straight into the property records of your CRM. REST in, any language out.

- Enrich existing rows instead of rebuilding your property table
- Stable schema — the same fields on every call
- Pair with StayAPI data endpoints to fill rates and reviews next to the links

 Sheets

 BigQuery

 Power BI

 Snowflake

 Postgres

 → Your CRM

Trusted by teams at

 ![EHL](/assets/logos/ehl-51e6ac832bd7a1b8c1f3c17ea48e7f7464f2aaead02a54b7cab2f2ee05b06c86.png) ![Skyscanner](/assets/logos/skyscanner-47f9fed400d4f828b0499892968e393aa1435240b8a573988d36fceb7f0433ae.png) ![Mews](/assets/logos/mews-e52288ca26c3e8d5e3878b522b92b521916a7df9c07556910102ad7bebbd216b.svg) ![CBRE](/assets/logos/cbre-f38211cf61a47f45d021ab25957f592fb2043bcff716539e3f2f54fd7fde91be.png) ![Ripe](/assets/logos/ripe-9fec989e25c3a18f2fec0357610bc743f12bf0e96cfa4824f457c4aa2c95db60.svg)

Questions
## Things developers ask before signing up.

Don't see your question? Email [info@stayapi.com](mailto:info@stayapi.com).

#Which platforms can you match against?

Name-to-URL matching covers **Booking.com, Agoda, TripAdvisor, Expedia, Priceline, Trip.com, KAYAK** and others. Link discovery casts a wider net — Hotels.com, Kayak, Marriott, Hilton, IHG, Hyatt and the property's own website.

#How does the matching actually work?

We resolve the hotel name against each OTA's public pages, then validate the result against strict per-platform URL patterns — a Booking match must be a real Booking hotel page, not a city landing page or a blog post. Titles are cleaned of SEO noise before they come back to you.

#What happens when there's no confident match?

You get an explicit no-match response, not a guess. A wrong mapping silently poisons every downstream join — we'd rather tell you we don't know.

#Can I turn a matched URL into rates and reviews?

That's the point. Feed a matched Booking or Agoda URL into the URL-to-ID converters, then use the ID with any StayAPI data endpoint — details, reviews, rooms, photos, prices. One key, one schema, end to end.

#Can you map an entire inventory, not one hotel at a time?

The API is self-serve at any volume. For bigger projects — large inventories, custom crosswalks, ongoing feeds — **book a call** and we'll scope the right setup together.

#How does pricing work?

Mapping calls use the same per-request credits as every other StayAPI endpoint. Keys land in your account on signup, with free requests to start. Volume pricing for large inventories is quoted on a call.

## Two ways to start. Both end with your inventory matched.

Pick the path that matches what you're shipping.

01 · For developers

### Keys in your account in 30 seconds.

Create an account and your API keys are ready immediately, with free requests to test. Everything else is in [the docs](/docs/endpoints/meta-match).

[Sign up, get keys](/users/sign_up)

02 · Bigger project?

### Let's talk it through.

Large inventory, custom crosswalks, an ongoing feed — if it's more than a few calls a day, we'll scope the right setup together.

[Book a call](/book-demo)
