Use cases

Search for listings and places

Real estate, rentals, jobs, directories and store locators: people search near them, inside the map they're looking at, or by name and street. Try it on 35,000 McDonald's restaurants.

What people search for.

near me

Near them, without asking

Browser searches can start near the visitor's city, from their IP address, with no permission prompt. Add a radius to keep it close.

this map area

Inside the map

Keep what the map shows, nearest its center first. A zoomed-out map searches as fast as a city.

2 bedrooms · under $2,500

Filters, then distance

Facets and price ranges as in any search. With a query, the best matches come first, ordered by distance.

What to upload.

One record per listing or place, with its location. The recipe in the docs goes through every field.

record.json
{  "objectID": "listing-48213",  "title": "Bright two-bedroom flat",  "type": "Apartment",  "area": "Reykjavík 105",  "address": "Laugavegur 120",  "price": 2150,  "bedrooms": 2,  "floorArea": 74,  "listedAt": 1790812800,  "_geoloc": { "lat": 64.1432, "lng": -21.9126 },  "url": "/rent/listing-48213"}
  • _geoloc holds lat and lng, and becomes the index's location field.
  • One location per record, so a chain gets a record per store.
  • Delete listings when they close, so they leave results and facet counts.
  • Every hit comes back with its distance, in meters.

Settings and search.

Choose the settings once, from your server or the dashboard. Searches then run straight from the browser with the index's public ID.

server · settings.ts
await listings.replaceSettings({  ...(await listings.getSettings()),  searchableAttributes: [    { field: "title", weight: 8 },    { field: "area", weight: 6 },    { field: "address", weight: 4 },  ],  facetFields: ["type", "area", "bedrooms"],  filterFields: ["price", "floorArea"],  locationField: "_geoloc",  didYouMean: true,})
browser · search.ts
const results = await client.search({  near: { visitor: true, radius: 5000 },  filters: { bedrooms: { gte: 2 }, price: { lte: 2500 } },  facets: ["type", "area"],})results.hits[0].distance // 640, in meters

Good to know.

  • Browser search shows roughly where each record is, even without returning its location. For private homes, upload a location rounded to the neighborhood.
  • Exact GPS positions rarely repeat, so they miss the cache. Round them to three decimals, about 100 m.
  • There's no map component: use any map library. The demo uses MapLibre.

Questions, answered.

Does “near me” need the visitor's permission?

Not for their city: browser searches can use the visitor's approximate location from their IP address. For a precise position, ask the browser for it and send the coordinates.

Which map library should I use?

Any. Search with the map's bounds when it moves. The React SDK's useGeoSearch keeps the search and the URL in step with the map.

Is location search on every plan?

Yes, including Free.

Can I build a store locator?

Yes: a record per store, with services such as a drive-through as true or false for facets, searched near the visitor. The demo is one, for 35,000 restaurants.

Other kinds of data.

Online stores

Typos, facets that keep counting, price sliders and sorts, for catalogs from a hundred products to a million.

Docs and help centers

Make each section a record, and a search lands on the right heading with the matching words highlighted.

Articles and research

Search titles, authors and abstracts, narrow by category and year, and sort by citations instead of price.

Start free with 10,000 records.

Upload your records, copy a public ID, and put search on your site today.