Search · Filters · Feeds for WooCommerce

Search that keeps up with 100,000 products.

Searchmaker replaces slow SQL queries with a purpose-built local index. Instant search, faceted filters and Google Merchant feeds in milliseconds, on the hosting you already pay for. No SaaS, no per-search fees, nothing leaves your server.

30-day money-back guarantee · license works offline · WordPress 6.5+ · WooCommerce 8+ · PHP 8.1+

measured*

0.39ms

Category + brand + facets + stock

On a 100,000-product catalog. Engine time, see below.

measured*

6.1s

Full index rebuild

100,000 products, peak memory about 57 MB.

by design

0services

No SaaS, no license server

Your catalog and your shoppers stay on your server.

open data

6,653pairs

Open synonym pairs

5 languages, free under CC BY 4.0.

* Development measurements on a synthetic catalog, engine time only (no HTTP). Method and caveats on the benchmarks page.

Works with Classic themes Block themes Salient + WPBakery WPML & Polylang aware Page builders via shortcode Variable products & variation SKUs

The SQL tax

Your shop's search is doing database work it was never built for.

WooCommerce keeps products across posts, postmeta and term tables. Every search or filter request boots WordPress, loads your theme and plugins, then asks MySQL to join and scan those tables. That is fine at 500 products. At 50,000 it is the slowest thing on your site, and it gets slower with every filter a shopper adds.

  • Search-as-you-type that lags behind typing and gives up on typos.
  • Filters that reload the page and take seconds on big categories.
  • A shop page that slows with every attribute you add.
  • Hosting upgrades bought to compensate for queries, not traffic.
A typical WooCommerce search requestBrowsertypes a letterWeb serverPHP-FPMWordPress bootstheme + pluginsWP_Querymeta + term joinsMySQLscans and sortsRender + replyHTML or REST JSONThe same request through SearchmakerBrowsertypes a letterWeb serverPHP-FPMquery.phpno WordPress loadedBitmapsAND / OR in memoryJSON replyids + cards
Illustrative: shows the work done per request, not timings. Measured numbers are on the benchmarks page.

On a real, slow ~6,500-product WooCommerce store we tested, the engine answered in single-digit milliseconds, while the theme's built-in live search (a WordPress admin-ajax request) took about 1.4 seconds round trip on average, and the same queries through WordPress's REST path 0.45 to 0.55 seconds. That gap is why Searchmaker's endpoint does not load WordPress at all.

How it works

Every filter is a bitmap. Every query is bit math.

Searchmaker turns your catalog into an immutable local index. Each term (a category, a brand, "in stock", a word in a title) is stored as a bitmap with one bit per product: 100,000 products is just 12.5 KB per term. A filter is a bitwise AND, "Brand A or Brand B" is an OR, and the same candidate bitmap gives you live facet counts for free.

12.5 KBper term at 100,000 products
adaptivedense bitmaps or sorted lists, picked per term
atomicvalidated builds, switched in one step, with rollback

Category AND (Brand A OR Brand B) AND In stock

Try it

Type like a shopper. Break it on purpose.

A miniature of the plugin's matching running in your browser on 36 demo products. Flip synonyms off to see what a plain search would have shown.

try:
northfield-tools.example

Start typing, or pick an example.

Three tools, one index

Buy what you need. Everything shares the same index.

Search, Filters and Feeds are separately licensed modules on one runtime. Start with one and add the others later without re-indexing.

Search

Instant results as shoppers type, on the search box you already have. Exact SKU and model matches first, then words, prefixes, compound words and typos, ranked in tiers.

  • Thumbnails, price, SKU, stock, details panel
  • Category and brand suggestions
  • Synonyms and learning from zero-result searches

Filters & catalog

Faceted filters with live counts: categories, brands, global attributes, stock and price. OR within a group, AND across groups, in a Fast Grid archive or alongside your theme.

  • Counts update as filters change
  • Shareable URLs and a working Back button
  • Canonical and noindex handled for you

Feeds

A static Google Merchant XML feed built from the same index. A streaming writer keeps memory flat: in our engine test, 100,000 products took about 3 seconds, and 240,000 items with every variation listed separately about 6.

  • Scheduled and regenerated after changes; per-variation items with item_group_id
  • Static file: feed requests never trigger generation
  • One feed per language

Compared with CTX Feed

Fits the way you already build

Four levels of integration. Start small, go as deep as you like.

Point Searchmaker at your theme’s search input with one CSS selector. Shoppers get instant results with thumbnails, price, SKU, category and brand suggestions and an optional details panel. No template edits.

your-shop.example
Instant search dropdown with thumbnails, prices and a details panel

Benchmarks

Milliseconds, with the setup attached.

Engine timings on a synthetic 100,000-product catalog (165,264 variations, about 38,800 terms). The grey bar is a naive full scan in PHP for scale.

Category + in stock
0.49 ms
Category + brand + 2 facets + stock
0.39 ms
Multiselect (OR within, AND across groups)
0.42 ms
Price range + category + stock
0.47 ms
Search + filters + first 24 product cards
0.64 ms
Counts for five facet groups
4.42 ms
Naive full scan in PHP (baseline)
53.6 ms

Logarithmic scale · shorter is faster

measured

6.1s

Full rebuild

peak memory about 57 MB

measured

178ms

Price/stock patch, 2,000 changes

writes 0.9 MB instead of 41 MB

measured

93ms

Edit delta, 300 edited + 100 new products

layered queries stay at 14 to 27 ms

measured

3.1s

Google Merchant feed, parent-only, 100,000 items

about 32,000 items per second, 43 MB of XML, flat memory (engine writer reading the index, PHP 8.3 CLI)

measured

6.4s

Google Merchant feed, one item per variation, 239,692 items

about 37,000 items per second, 129 MB of XML; 100,000 parents with 159,758 variations, flat memory

Understands what shoppers mean

They type "couch". You sell sofas. Both should win.

Searchmaker ships with open synonym packs and learns from searches that found nothing. Only words that exist in your catalog are ever used, so a garden shop does not carry rules for sofas.

fiakkupora ↔ akkuporakonefiastianpesukone ↔ tiskikonefihakanen ↔ sinkilafihalkaisukone ↔ halkomakonefihengityssuoja ↔ hengityssuojainfihousuvaippa ↔ vaippahousutenbackpack ↔ rucksackenbookcase ↔ bookshelfenc-clamp ↔ g-clampencaulk ↔ sealantencooktop ↔ hobencouch ↔ sofasvakgrasklippare ↔ akklipparesvansiktsvisir ↔ visirsvavjamningsmassa ↔ golvspackelsvbagsvets ↔ elektrodsvetssvbetongspikare ↔ betongspikpistolsvbodylotion ↔ kroppslotiondeaa-batterie ↔ mignonbatteriedeakku-motorsage ↔ akkukettensagedearbeitsplattform ↔ arbeitspodestdeaugenmaske ↔ schlafmaskedebadewannenablage ↔ wannenablagedebauchtasche ↔ hufttascheetaareloikur ↔ servaloikuretaiakultivaator ↔ mullakultivaatoretakukettsaag ↔ akumootorsaagetakupuur ↔ akutrelletauguraud ↔ paberiaugustajaetc-klamber ↔ c-pitsfiakkupora ↔ akkuporakonefiastianpesukone ↔ tiskikonefihakanen ↔ sinkilafihalkaisukone ↔ halkomakonefihengityssuoja ↔ hengityssuojainfihousuvaippa ↔ vaippahousutenbackpack ↔ rucksackenbookcase ↔ bookshelfenc-clamp ↔ g-clampencaulk ↔ sealantencooktop ↔ hobencouch ↔ sofasvakgrasklippare ↔ akklipparesvansiktsvisir ↔ visirsvavjamningsmassa ↔ golvspackelsvbagsvets ↔ elektrodsvetssvbetongspikare ↔ betongspikpistolsvbodylotion ↔ kroppslotiondeaa-batterie ↔ mignonbatteriedeakku-motorsage ↔ akkukettensagedearbeitsplattform ↔ arbeitspodestdeaugenmaske ↔ schlafmaskedebadewannenablage ↔ wannenablagedebauchtasche ↔ hufttascheetaareloikur ↔ servaloikuretaiakultivaator ↔ mullakultivaatoretakukettsaag ↔ akumootorsaagetakupuur ↔ akutrelletauguraud ↔ paberiaugustajaetc-klamber ↔ c-pits

Synonym packs, open and growing

6,653 pairs across 5 languages: synonyms, compound split-and-join variants, abbreviations and misspellings. Free under CC BY 4.0, bundled in the plugin and maintained in the open.

Learns from zero-result searches

When shoppers search for something that finds nothing and then click a result for another word, enough distinct visitors teach the first word automatically. Anonymous, capped, reversible, and off with one switch. Brand names and model numbers are never rewritten.

fi

Finnish model-reviewed

1,333 pairs · 4 packs

en

English generated

1,503 pairs · 4 packs

sv

Swedish generated

757 pairs · 4 packs

de

German generated

1,886 pairs · 4 packs

et

Estonian generated

1,174 pairs · 4 packs

da

Danish

planned

nb

Norwegian

planned

fr

French

planned

es

Spanish

planned

nl

Dutch

planned

pl

Polish

planned

it

Italian

planned

Dashed languages are planned. Contributions welcome, native-speaker review most of all.

Built for big, busy catalogs

The unglamorous parts, done carefully.

Large WooCommerce shops have variable products, ERP syncs and hundreds of price changes a day. These are the details that decide whether a search plugin survives them.

Variable products done right

Parents are the result unit. Variation SKUs, attributes, stock and min/max price roll up into them, so a search for a variation SKU lands on the right parent.

Price and stock without rebuilds

Orders and ERP syncs patch prices and stock into the index in tens of milliseconds, writing under 1 MB instead of rebuilding.

Edits as delta layers

Titles, categories, new and removed products become small delta layers next to the index. Searches see them immediately; the next rebuild merges them.

Immutable, validated builds

Every build is written aside, checksummed and switched in atomically. A failed build never touches the live index, and rollback is one click.

Fails soft

If the index is missing or unhealthy, shoppers fall back to normal WooCommerce results. Search is never the reason your shop is down.

Bounded memory

No product arrays in PHP at query time. Fixed-size reads, streaming writers and chunked builders keep memory flat on 128 MB hosting.

Fast, and still findable

Search and filter pages that Google can still read.

  • Server-rendered first page with real product links, image alt text and ItemList structured data.
  • Filter combinations get noindex and a canonical to the clean archive.
  • Real 404s beyond the last page instead of thin empty pages.
  • Your titles and breadcrumbs stay yours in Compatibility mode.

Yours, entirely

Your catalog and your shoppers stay on your server.

  • No external search service. Products are indexed into your own uploads folder.
  • Offline signed license. No license server, no tracking, no phone-home.
  • Read-only public endpoint. Strict request limits, no SQL, no eval, no WordPress bootstrap.
  • Anonymous learning with no IP, user agent or user id, deleted after 35 days.

504 automated checks across the engine, plugin and runtime, plus live runs inside WordPress and a real browser. Compatibility is tracked openly: see what is verified and what is not.

Pricing

One license per site. Everything runs on your server.

Annual licenses, offline keys, 30-day money-back guarantee. Prices exclude VAT.

Search

Instant results on the search box you already have.

179 €/ year

excl. VAT

  • Instant search on your existing search box
  • Rich dropdown: thumbnails, price, SKU, details panel
  • Typos, prefixes, compound words, exact SKUs
  • Synonym packs and learning from searches

Filters & catalog

Faceted filters and a Fast Grid shop archive.

219 €/ year

excl. VAT

  • Faceted filters with live counts
  • Fast Grid archive or Compatibility mode
  • Price filter, sorting, pagination
  • SEO-safe archives (canonical, noindex, real 404)

Feeds

Google Merchant feed with per-variation items, streamed in bounded memory.

119 €/ year

excl. VAT

  • Google Merchant XML feed
  • Streams 240,000 items (100,000 products with their variations) in about 6 seconds
  • Per-variation items with item_group_id, own price, stock and image
  • Scheduled and regenerated after changes
Best value

Complete

Search, filters and feeds on one index.

449 €/ year

excl. VAT

  • Everything in Search, Filters and Feeds
  • One index, one runtime, one license key
  • Instant search results that respect your filters
  • Best price per site

Each yearly license is valid for 1 year. Keys work offline (no license server, no phone-home) and are tied to the domains you list. 30-day money-back guarantee. Prices exclude VAT.

Questions

Straight answers.

Something missing? Ask us. We would rather answer than guess. Weighing us against SearchWP or FiboSearch? Compare them fact by fact.

Do I need an external search service or a subscription per search?

No. Searchmaker builds a compact index in your uploads folder and answers from a tiny PHP endpoint on your own server. No SaaS, no per-search fees, no product data leaving your hosting. The license key is verified offline, so there is no license server to phone home to either.

Will it work with my theme?

Instant search attaches to your existing search box through a CSS selector, so it works with classic and block themes without template changes. We verified it on a block theme, a classic theme and Salient with WPBakery. Diagnostics includes a compatibility check and suggested selectors for popular themes (treated as suggestions until verified on your site). Fast Grid replaces the main shop and category query; page-builder grids with their own queries are not replaced, but the [searchmaker_catalog] shortcode covers them.

What happens when products, prices or stock change?

Price and stock changes are patched into the index in tens of milliseconds, product edits and new products are applied as small delta layers, and a full rebuild is reserved for term-level changes and the first build. On a 100,000-product development catalog a patch took 65 to 178 ms and a full rebuild about 6 to 10 seconds. Rebuilds are immutable and validated, a failed build never touches the live index, and you can roll back.

What if the index is missing or broken?

The front end falls back to normal WooCommerce behaviour. Searchmaker is designed to fail soft: if the endpoint is unavailable or the index is unhealthy, shoppers still get results from WooCommerce while you rebuild.

Does it handle multiple languages?

It builds one index per language and is built for WPML and Polylang. Synonym packs are available for Finnish, English, Swedish, German and Estonian, and more languages are on the way (they are open data). TranslatePress-style setups are not supported yet.

How is this different from FiboSearch or the YITH filter plugins?

Those are established plugins and a fair comparison is for you to make on your own catalog. The architectural difference is that Searchmaker keeps catalog data in a purpose-built local index and answers through an endpoint that does not bootstrap WordPress, and that search, filters and feeds share one index. We are publishing head-to-head measurements on identical hardware; until they are in, the benchmarks page marks those rows as placeholders instead of guessing.

How does licensing work?

A license is a signed key for one year, for the domains you list at checkout (wildcards like *.example.com are supported). Install the plugin, paste the key under Searchmaker > License. After expiry there is a 30-day grace period; then the licensed modules switch off and WooCommerce takes over. Nothing is deleted.

Can agencies use it on client sites?

Yes. The 5-site and 25-site bundles are priced per site for exactly that. List each client domain when you buy; each key only unlocks the listed domains.

What is the refund policy?

There is a 30-day money-back guarantee. If Searchmaker does not do what you need, write to us within 30 days of purchase and you get a full refund.

Do prices include VAT? Do you issue invoices?

Prices are shown excluding VAT. Checkout collects your billing address and VAT ID, calculates tax where applicable and Stripe emails an invoice and receipt.

What are the requirements?

WordPress 6.5 or newer, WooCommerce 8.0 or newer and PHP 8.1 or newer with the sodium extension (included in standard PHP builds) for offline license verification. No Redis, no daemon, no shell access, no extra database.

How big is the index and how fast is it really?

On a synthetic 100,000-product catalog (PHP 8.3, 128 MB) a category plus brand plus facets plus stock query takes about 0.4 ms of engine time and a full rebuild writes about 41 MB. Those are development measurements of the engine, not an end-to-end promise for your server: the benchmarks page explains what is measured, shows the numbers, and the head-to-head rows are placeholders until measured.

Is the search learning from my shoppers GDPR-friendly?

It is designed to be: no IP address, user agent or user id is stored, personal-looking queries are dropped, the visitor is a day-salted hash of a random per-tab id, raw events are deleted after 35 days, and you can switch it off or delete the data any time. You remain responsible for your own privacy policy; we provide a suggested sentence.

Is any of it open source?

The synonym language packs are open data under CC BY 4.0 at github.com/searchmaker/searchmaker-language-packs, with Finnish, English, Swedish, German and Estonian today. The plugin and engine are commercial.

OEM and platforms

Building your own product? License the engine.

The index behind Searchmaker is a plain PHP library with a standalone runtime. Put fast search, filters and feeds inside your plugin, platform or hosting offer, under your brand.

Give your shoppers an answer before they finish the word.

Install in minutes, rebuild once, and watch the first search come back in milliseconds.