How intent extraction works
Intent extraction is the bridge between English and a structured ProductSearchRequest. It’s why the chat works.
This page is a peek under the hood — useful when chat behaves unexpectedly or when you’re trying to write better prompts.
In this guide:
- The two-tool design
- What gets extracted
- How Claude decides
- Common edge cases
The two-tool design
Claude is given exactly two tools:
extract_search_params
Use this when the message describes a research goal that should run a search.
Returns a structured object:
{
"keyword": "bamboo socks",
"marketplace": "UK",
"category": null,
"fulfillment": "FBA",
"min_price": null,
"max_price": 20,
"margin_floor": null,
"competition_filter": "Low",
"free_text": null
}Hilal then runs that search.
no_search_intent
Use this when the message is a question, comment, or exploration that doesn’t need a search.
Returns nothing structured. Claude responds in plain text.
How Claude decides
A system prompt tells Claude to pick extract_search_params only when:
- The message describes a product the user wants to find (“show me”, “find”, “what are good [products]”).
- The message contains enough specificity to make a search useful (at least a noun phrase or a category).
- The message is asking for results, not for an explanation.
Otherwise, no_search_intent.
Examples and how Claude routes them:
| Message | Tool | Why |
|---|---|---|
| “bamboo socks under $20 in UK” | extract_search_params | Clear product, marketplace, price band. |
| “what’s a good niche for a new seller?” | no_search_intent | Broad question, not a specific product request. |
| “how does SFR work?” | no_search_intent | Definition question. |
| “find products in beauty under $30” | extract_search_params | Specific category and price. |
| “any update on AutoSearch?” | no_search_intent | Meta-question about the product. |
| “show me top sellers in pet care” | extract_search_params | Category + intent to search. |
Claude is conservative: if the message is genuinely ambiguous, it picks no_search_intent and asks a clarifying question rather than guessing the parameters.
Defaults when fields are missing
If your message doesn’t mention everything, Claude fills in defaults:
| Field | Default if missing |
|---|---|
marketplace | Your primary marketplace from Settings → Marketplaces. |
category | None (search across all). |
fulfillment | “Either” (no filter). |
min_price / max_price | None (no price filter). |
margin_floor | None. |
competition_filter | “Any”. |
The search_triggered event in the chat shows you exactly what Claude extracted, so you can confirm before the search costs you a credit.
Common edge cases
Claude triggered a search you didn’t want
Sometimes a comment that sounds like a search request gets misclassified. Two options:
- The chat shows the extracted params before the search runs; you have a moment to cancel (tap Stop).
- After the fact, the search appears in your history and you can soft-delete it. Credit is still charged though.
To minimize this, prefix conversational messages with phrases like “explain…” or “what’s the…” — these strongly cue no_search_intent.
Claude didn’t trigger a search you wanted
The reverse: you wrote what felt like a search request, Claude treated it as conversational. Usually this is because you didn’t include a noun phrase (“show me good products”) — Claude needs what you’re searching for.
Add specificity: instead of “show me good products”, write “show me good products in the home-fitness category.”
Claude extracted weird params
Claude occasionally infers a constraint you didn’t write (e.g., assumes “under $30” because you said “affordable”). The search_triggered event always displays the actual params; you’ll see it before the search runs.
How prompt caching helps
The intent-extraction system prompt is cached in Claude’s prompt-caching layer. That means each chat message:
- Doesn’t re-pay the cost of re-loading the system prompt.
- Routes faster (fewer tokens to process per message).
- Keeps the chat affordable to operate.
You don’t see this; it just makes the chat snappier.