Use cases

Product search for online stores

Shoppers misspell names, tick sizes and brands, and sort by price. Findlane handles all of it from one index that stays in sync with your catalog, from your first hundred products to a million.

What shoppers search for.

runing shoes

Misspelled names

Prefixes from three letters, one typo in short words and two in long ones, and synonyms for your shoppers' words, such as trainers for running shoes. Exact matches still come first.

brand · size · under $150

Filters that keep counting

Facets for brands, sizes and colors that stay listed after a shopper ticks one, and a price slider that knows the catalog's range.

Price: low to high

Sorts and best sellers

Sorts you name once, such as price or newest, and popularity to order products that match about equally well.

What to upload.

One record per product, with its variants as lists. The recipe in the docs goes through every field.

record.json
{  "objectID": "stridewell-cadence-road-knit",  "title": "Cadence Road Knit Running Shoe",  "brand": "Stridewell",  "category": "Running shoes",  "description": "An everyday neutral trainer…",  "price": 109,  "compareAtPrice": 129,  "inStock": true,  "colors": ["Glacier blue", "Black"],  "sizes": ["8", "9", "10", "11"],  "popularity": 874,  "image": "https://cdn.example.com/cadence.webp",  "url": "/products/cadence-road-knit"}
  • Variants are lists, so a product shows once and matches a filter on any of its colors or sizes.
  • Prices are numbers: the lowest variant price, and compareAtPrice for a sale.
  • inStock hides what can't be bought, and popularity puts best sellers first among equal matches.
  • Browser search can read every field, so leave out costs and supplier details.

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 products.replaceSettings({  ...(await products.getSettings()),  searchableAttributes: [    { field: "title", weight: 8 },    { field: "brand", weight: 4 },    { field: "category", weight: 3 },    { field: "description", weight: 1 },  ],  facetFields: ["brand", "category", "colors", "sizes"],  filterFields: ["price", "inStock"],  customRanking: [{ field: "popularity", direction: "desc" }],  synonyms: [["sneakers", "trainers", "running shoes"]],  didYouMean: true,})
browser · search.ts
const results = await client.search({  q: "trail shoes",  filters: { inStock: true, sizes: { in: ["10"] } },  facets: ["brand", "colors", "sizes"],  disjunctiveFacets: ["brand", "colors", "sizes"],  facetStats: ["price"],})

Good to know.

  • A list filter matches any of its values, so black in size 11 also finds a shoe whose black pair stops at 10. Make one record per color when that matters.
  • One currency per index, or a price field per currency, such as price_eur and price_usd.
  • Every write is searchable when it returns. A nightly full replacement removes the products you deleted.

Questions, answered.

Do you have a Shopify app?

Yes. Findlane for Shopify syncs your products and answers your theme's own search box, without code. It's on its way to the Shopify App Store.

How do I keep prices and stock current?

Write a product when it changes, from a webhook or your admin's save handler, and replace the whole catalog nightly. Each write is searchable as soon as it returns.

How big can my catalog be?

Plans go up to a million products, and dedicated clusters go further. One request replaces up to 100,000, and bigger catalogs upload in batches.

Can I run several stores?

Yes, with an index per store or language, each with its own settings and allowed origins. Plans include from 1 to 50 indexes.

Other kinds of data.

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.