searchabee’s index stays fresh via Shopify webhooks. Understanding the flow helps when something looks off.
Webhooks we subscribe to
products/create,products/update,products/deletecollections/create,collections/update,collections/deleteinventory_levels/updateproduct_listings/add,product_listings/remove(for publishing state)
Each webhook fires a differential update to the shop’s Meilisearch index. Typical end-to-end latency (webhook → index updated → next query sees change): 2–5 seconds.
What happens on each event
products/update
- Webhook arrives at searchabee.
- searchabee fetches the full product via GraphQL (webhook payloads are often partial).
- Transforms to the indexed shape (variants flattened, filter fields extracted).
- Upserts into the Meilisearch index.
inventory_levels/update
- Webhook arrives.
- If any searchabee filter source depends on availability, the affected variant’s document is updated.
- Otherwise no-op (saves cycles).
What this means operationally
- Bulk imports fire a lot of webhooks quickly. searchabee queues them on Redis Streams and processes at a steady rate, respecting Shopify’s webhook rate limit tolerance. You may see a few seconds of index lag during a 10k-product import.
- Draft products are excluded. If a product is not published to the Online Store channel, it’s not in the index.
- Soft-deleted products (deleted then restored) re-appear in the index on the next webhook.
Debugging sync
searchabee console → Sync → Activity shows every webhook received, the action taken, and the resulting index state. Filter by product ID to see the history for a specific SKU.
If a product seems to be stale in the index:
- Check Activity — did the webhook arrive? If not, it’s a Shopify-side issue (check Shopify Admin → Notifications → Webhooks).
- Force-sync that product: Products → [product] → Resync. This triggers a direct GraphQL pull and upsert, bypassing webhook.
Full resync
A full resync rebuilds the entire index from scratch. Only do this when:
- You’ve restructured filter trees and need to re-derive attributes.
- The index is demonstrably corrupted (rare).
Sync → Rebuild index triggers it. Expect the initial-backfill timings from the large catalogs guide.