Webshop source

The Webshop source crawls an entire PrestaShop store from its sitemap. Every page becomes one content item in your assistant, and product pages additionally get a structured record with the exact price and stock. So your assistant never guesses: the chat renders real product cards, and the product_prices tool returns the price straight from the database — no rounding, no math in its head.

On this page

Why use this

  • You run a PrestaShop store and want your assistant to answer with exact price and stock, not just the product description text.
  • You want the chat to render product cards with image, name and price, linking straight to the product page.
  • You want to import the whole store in one step — the Webshop source processes every page in the sitemap, not just products.
  • On an unsupported engine? Use the Website source instead — it also crawls the catalog, but without structured price/stock or product cards.
Supported platforms
The Webshop source supports five store engines: PrestaShop, WooCommerce, Shopify, ShopRenter and UNAS. On connect we auto-detect the platform and run a sample check that shows the detected platform and currency. If your shop runs on another engine (e.g. Magento, OpenCart, Wix) or does not expose the required product fields (name, price, currency, image, description, stock), the connection reports an error — use the Website source in that case.

How it works

The crawl behaves like the Website source — it starts from the sitemap — but it processes each page based on whether it's a product page or not.

  1. Discover. EchoAI reads the store's sitemap and collects every URL. CDATA-wrapped URLs (common on PrestaShop) are parsed correctly.
  2. Classify. Depending on the detected platform, each URL is classified as a product page or another page (category, blog, static). Shopify and WooCommerce use the public product listing (JSON API); the other platforms use the sitemap's product links; on UNAS the product links are collected from each category page's product list.
  3. Process a product page. EchoAI fetches the page, extracts the product data (name, price, currency, stock, SKU, brand, category, attributes, images), and writes two things:
    • a structured record with the exact price and stock — this powers the product cards and exact pricing in chat;
    • a content item (RAG corpus) linked 1:1 to that structured record — this counts toward your content limit and makes the product searchable by text (attributes like "Colour: Natural" are included in the searchable body).
  4. Process other pages. Non-product pages become a plain content item only, without price/stock — exactly like the Website source.

The crawl runs in the background and processes pages concurrently. It is idempotent: re-syncing skips already-imported pages, so no duplicates are created and your content limit isn't wasted.

Exact price, not a guess
From the structured records, the assistant reads prices via the product_prices tool straight from the database and computes line items and totals server-side. So it never invents a price or does math in its head — even a quantified order has a deterministic total.

Product cards in chat

When a visitor asks about products, the assistant doesn't just reply with text: it renders product cards in a two-column grid (up to 6 cards) inside the conversation. Each card is clickable and opens the product page in a new tab.

A card shows:

  • Product image (if available) — dimmed for out-of-stock products.
  • Product name.
  • Price — formatted for the conversation language (thousands separator, currency).
  • Stock status — a coloured dot plus a label (green = in stock, gray = out of stock). The label is localized (e.g. "In stock" / "Out of stock"); the exact quantity is never shown, only the binary state.

Card order is gently re-ranked so the most useful products surface first:

  • first the in-stock products,
  • then those that have a price,
  • finally those that have an image.

The search relevance order is preserved within products of equal score. Out-of-stock products don't disappear — they're just shown more dimly and in gray, so they stay informative without being alarming.

Security
Store data is untrusted, so cards only allow http(s) links and images — javascript: and data: schemes are filtered out (XSS protection).

Step-by-step setup

  1. Open Integrations (content sources) in the dashboard.
  2. Find the Webshop product data card.
  3. Enter your webshop URL. For a multi-locale store you can narrow to one language with a path prefix (e.g. https://yourshop.com/en).
  4. Select which assistant should receive the imported products.
  5. Click Connect webshop. EchoAI starts the crawl, and you can track status on the card: connectingcrawlingactive.

When the crawl finishes, the card shows how many products were synced. You can refresh prices and stock later by re-syncing — the idempotent crawl only picks up what's new.

Why prices stay correct (currency-lock and geo-proxy)

PrestaShop can decide which currency to render based on the visitor's IP country. That means if the crawler "looks at" the store from another country, the price can come back in the wrong currency — and the correct one is physically absent from the fetched bytes. EchoAI guards against this with two mechanisms.

Currency-lock

On the first crawl, EchoAI detects the currency from the store homepage and locks it on the source. From then on, the crawler validates every product against that locked currency:

  • A product in the correct currency → imported.
  • A product in the wrong currency → rejected, written neither as a structured record nor as content. Any existing, correct data is left intact — "stale but correct" always beats "fresh but wrong".

Geo-proxy

So the store renders the correct currency in the first place, EchoAI crawls geo-gated stores through a residential proxy in the store's country. EchoAI learns the connecting admin's country from the connection and stores it on the source, so the crawl "looks into" the store from there.

If every product comes back in the wrong currency
If the source is currency-locked but the crawler gets EVERY product in the wrong currency (i.e. the geo-proxy didn't crawl from the right country), the crawl writes nothing and loud-fails — both the source and the integration go to an error state. In that case check the geo-proxy egress, not the store. Existing correct-currency data is not overwritten.

Limits and behaviour

AspectBehaviour
Platform 5 platforms — PrestaShop, WooCommerce, Shopify, ShopRenter, UNAS
Content limit Every crawled page (product and other) consumes your plan's content limit. The limit is not monthly: it doesn't reset, space is freed only by deleting content. Exact numbers: Limits.
Reaching the quota mid-crawl If the crawl reaches the content limit it doesn't error; it stops gracefully and reports how many pages were skipped — so it surfaces as a partial import.
Re-syncing Idempotent — already-imported pages are skipped, only new ones are picked up. No duplicates.
Structured records Created only from product pages; other pages become plain content.
Stock display In chat, stock is binary (in stock / out of stock) — the exact quantity is never shown.

Common errors and troubleshooting

SymptomCauseFix
"Connection failed" The submitted URL is unreachable, isn't a PrestaShop store, or no sitemap was found. Check the URL in your browser and that the store exposes a public sitemap. On PrestaShop, make sure the sitemap module is enabled.
Some products are missing The product page wasn't recognised as a valid product, or didn't render properly. Open the product in your browser and check that it's a standard PrestaShop product link (e.g. /123-product-name.html).
Prices in the wrong currency The crawler didn't "look into" the store from the store's country (geo-proxy egress issue). Currency-lock filters out wrong-currency products; if every product is wrong-currency the crawl errors out. Check the geo-proxy setting, then re-sync.
The crawl ended in an error state Currency-blocked crawl: EVERY product came back in the wrong currency relative to the locked one. The geo-proxy egress didn't crawl from the right country. Fix the egress setting and re-sync — existing correct data is preserved.
"Content limit exceeded" The store has more pages than your plan's content limit allows. Narrow to one locale with a path prefix, delete content to free space, or upgrade your plan.