Probes
Before adding a vendor, probe its site. A probe reads a URL politely and reports the platform with its evidence, any wall, the public feed, sitemaps, structured data coverage and the effort to pull it.
A probe (prb_…) answers "what does this vendor's site offer, and how hard is it to read?"
before you add a source. Give it a storefront or product page URL; it reads the site politely in
the background and returns a report.
Probe from the dashboard under Sources › Probes (Probe a vendor's URL), or with
POST /v1/source-probes, which needs
sources:write. Follow it with GET /v1/source-probes/{id}:
a probe takes about a minute.
curl https://api.furniops.com/v1/source-probes \
-H "Authorization: Bearer $FURNIOPS_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "url": "https://vendor.example" }'How a probe reads a site
- It reads
robots.txtfirst and obeys it, for FurniOps' own, honest user agent. - One request at a time, at least a second apart (or the site's crawl delay), and at most 25
requests in all,
robots.txtincluded. - It never signs in, solves a challenge or works around a wall: a wall is reported, and means "ask the vendor".
The report
| Part | What it says |
|---|---|
platform, confidence, evidence | The storefront platform (Shopify, WooCommerce, Magento, BigCommerce, Squarespace, Wix, Salesforce Commerce Cloud, Shopware, WordPress, or unknown), a score from 0 to 1, and the public signals it was named from. |
wall | What stopped the probe short, if anything (below). |
feed | The platform's public product feed (Shopify or WooCommerce): its status, the products on its first page, the total when it says, and the fields it gives. |
sitemap | The sitemaps read, the product pages they list, and whether there were more. |
sample | Structured data (JSON-LD) read from a sample of product pages: products found, broken blocks, and the share of products giving each field. |
robots | What robots.txt said: parsed, unavailable (everything allowed) or unreachable (nothing allowed), its crawl delay and its sitemaps. |
disallowed, requests, notes | URLs robots.txt kept the probe from, the requests made, and anything else that cut it short. |
estimate | The effort to pull the site, the kind of source to use, and the reasons. |
Walls
wall.kind | Meaning |
|---|---|
bot_challenge | A bot challenge stood in the way. |
login | The catalogue needs a sign-in. |
password_page | The store is behind a password page. |
rate_limited | The site answered 429. |
robots_unreachable | robots.txt did not answer, so nothing is allowed. |
robots_disallows_site | robots.txt disallows the site. |
crawl_delay_too_long | The crawl delay asked for is too long for a probe. |
unreachable | The site could not be reached. |
The estimate
effort | Means | Suggested kind |
|---|---|---|
low | A public feed. | platform_feed |
medium | Structured data on most product pages. | structured_page |
high | Pages that need a browser. | browser |
ask_vendor | A wall: ask the vendor for a file or API access. | vendor |
A suggested kind is advice: FurniOps runs only some kinds today.
Limits
- A catalogue may have 3 probes queued or running at once, and start 20 in 24 hours; one
more answers
409conflict. - Probing is in the
expensiverate class. - Probes belong to the mode they were made in, and are kept with its catalogue.
From a probe to a source
Add the source yourself from what the report says. With AI agents in your plan, the
onboarding agent drafts the source for you when FurniOps can run one for the site now (a public
feed of a platform it reads, and no wall): the probe's proposal names that
proposal, and a person decides.
Runs
One pull of a source, from fetch to master records. Triggers and streams, the stages a run goes through, how it ends, the cells it could not read, waiting, replaying a snapshot, and starting a run yourself.
How matching works
How FurniOps decides that two sources' records are the same item. Deterministic identifiers first, then a trained probabilistic model with embeddings, then an AI judge that must quote its evidence, and people for everything in doubt.