Key Benefits
- Automated verification: Every result is checked against your criteria before becoming an item — no manual filtering needed.
- Structured enrichments: Extract specific data points (names, emails, URLs, numbers) from each result using web research, not just page scraping.
- Real-time updates: Use webhooks and monitors to keep websets continuously updated without polling.
Writing Good Queries
The query drives search behavior. Be specific and descriptive, natural language works well for most queries.
Avoid vague queries like “interesting companies” or “good articles” — these produce noisy results that waste verification tokens.
Include URLs for context: Any URL in the query will be crawled and used as additional context for the search. Use this when you want results similar to a specific page.
Writing Effective Criteria
Criteria determine whether a search result becomes an item. Each result is verified against every criterion — only results matching all criteria are kept. Keep criteria verifiable. Each criterion should be something that can be confirmed from publicly available web content.successRate on search responses to see what percentage of evaluated items matched each criterion. A very low success rate might indicate an overly strict or ambiguous criterion.
Choosing Entity Types
Theentity field shapes how results are found and structured. Auto-detection works well in most cases, but explicit types give you more control.
Designing Enrichments
Enrichments extract additional data from each item using web research. Think of them as questions Websets answers for every result. Be specific about what you want. Vague enrichments produce vague results.
Choose the right format to get structured output:
Use
options for classification tasks — it’s more reliable than asking for freeform text when you have a known set of categories:
Async Patterns
Websets are asynchronous — results arrive over time as searches complete and enrichments process. Usewait_until_idle in SDKs for simple workflows:
webset.item.created— fires as each item passes verification (stream results as they arrive)webset.item.enriched— fires when an enrichment result is ready for an itemwebset.idle— fires when all searches and enrichments complete
running — you don’t have to wait for idle.
Idempotency and Deduplication
UseexternalId to prevent duplicate websets. If you create a webset with an externalId that already exists, you’ll get a 409 error instead of a duplicate. You can then use externalId in place of id for all API calls.
Monitors for Recurring Searches
Monitors run searches on a schedule to keep websets updated with fresh results."behavior": "append" in monitor searches to add new items without removing existing ones. Use "override" to re-evaluate existing items against new criteria.
Imports for Your Own Data
Imports let you bring URLs from your own sources (CRM exports, spreadsheets, etc.) and run enrichments on them:Common Patterns
Lead Generation Pipeline
Competitive Intelligence
Tips
- Enrichment results are always arrays. Even for single values,
resultis["value"]ornullif not found. - Enrichment results have
enrichmentId, notdescription. Build a map fromwebset.enrichmentsto resolve IDs to descriptions:{e.id: e.description for e in webset.enrichments}. - Item data is nested under
properties. Accessitem.properties.url,item.properties.company.name— notitem.url. expand=itemssaves a call.GET /websets/{id}?expand=itemsreturns the webset and its latest 100 items in one request.- Webhook secrets are shown once. Store the
secretfrom the create response immediately for signature verification. - Preview before committing. Use
POST /websets/previewto test a query without creating a webset.