One script. Every storefront feature.
For developers placing Recommendor on a custom theme or a non-WordPress front end.
Load only what you use
Each loader is a separate script, so a theme that only wants recommendations never pays for the chat widget's weight.
Recommendations, search, and alerts
Renders every <span class="getrecommendor"> block on the page, fires click and search tracking, and powers the product-alert widget and bundle add-to-cart.
The shopping assistant
Loads the AI shopping-assistant chat widget for the storefront.
Session recording
The rrweb-based session recorder, gated by the store's toggle — nothing records unless you turn it on.
Every block resolves from a design UUID
Recommendation and search blocks resolve with a single GET request. Context is optional — the loader also reads window.getrecommendorContext and <meta name="getrec:…"> tags if you'd rather not use query params.
Public storefront endpoints are CORS-open and quota-gated, keyed to your registered store origin. Cart, checkout, chat, alerts, and recordings each have their own documented POST endpoints.
&visitor_id=v_8f2c&email=customer@example.com
| Param | Meaning |
|---|---|
| ?p= | Product context (e.g. the current product ID) |
| ?c= | Category context |
| ?q= | Search keywords |
| ?visitor_id= | Anonymous visitor identifier |
| ?email= | Known customer email, for logged-in shoppers |
Two ways to put a block on the page
Both are configured from the dashboard's element builder — no redeploy needed to move a block later.
Injection
Point the loader at a CSS selector and it inserts the block for you — before, after, appended, or prepended, or replacing the element outright — with an optional exclude-URL rule for pages you want left alone.
Embedded code
Paste the generated one-line <span> into your theme directly. Store, logic, product count, title, and position are all resolved server-side from the design UUID.
Full endpoint reference, payload shapes, and error codes are covered in the documentation.
View documentationQuestions about the embed and API
Placement, context, and what happens when something is unreachable.
No. The plugin is the fastest path on WooCommerce, Shopify, or Magento, but the same loaders and endpoints work on any theme — add the script tag and the generated <span> markup, and the block resolves the same way.
The storefront renders as before. A block that can't resolve simply doesn't inject — it never blocks the rest of the page from loading.
No, all of them are optional. The loader falls back to window.getrecommendorContext or <meta name="getrec:…"> tags if you'd rather set context once per page instead of per query string.
Yes — the loaders and endpoints are plain JavaScript and REST, independent of WordPress. The store still needs to be a WooCommerce, Shopify, or Magento store today; the front end serving it can be anything.
See What Your Store Is Leaving on the Table
Connect your store, let the catalog sync, and the first numbers land the same day.