Trigger Phrases
“create table”, “upload companies”, “add to extruct”, “new extruct table”, “import companies”, “upload list to extruct”Environment
| Variable | Service |
|---|---|
EXTRUCT_API_TOKEN | Extruct API |
https://api.extruct.ai/v1
Official API Reference
Workflow
Verify API reference
- Read local reference:
../list-enrichment/references/api_reference.md - Fetch live docs: https://www.extruct.ai/docs
- Compare endpoints, params, and response fields (especially
POST /tables,POST /tables/{id}/rows,POST /tables/{id}/columns) - If discrepancies found:
- Update the local reference file
- Flag changes to the user before proceeding
- Proceed with the skill workflow
Parse input data
Accept data in any of these formats:Pasted list (most common): User pastes company names, URLs, and metadata as freeform text. Parse into structured records. Extract domains by stripping protocol,
www., and trailing slashes.CSV file: Read CSV, map columns to find the URL/domain column.Extruct table URL: Fetch data from existing table via API.Key rules:- Skip entries with no URL (e.g., “Stealth” companies)
- Deduplicate by domain
- Ask which metadata fields to preserve (country, stage, industry, etc.)
Decide: create new table or add to existing
Ask the user:
- New table: Create via
POST /tables - Existing table: User provides table ID or URL (
https://app.extruct.ai/tables/{id})
POST /tables with kind: "company" and a single input column (kind: "input", key: "input"). The company kind auto-enriches each domain with Company Profile, Company Name, and Company Website columns.Upload rows in batches
Upload domains via
POST /tables/{table_id}/rows in batches of 50. Each row: { "data": { "input": "domain.com" } }. Add 0.5s delay between batches.Report progress: “Batch 1: uploaded 50 rows OK”Add agent columns (optional)
If the user wants enrichment columns (industry, funding, etc.), add them after upload via
See the
POST /tables/{table_id}/columns.Column types by use case:| User says | Agent type | Output format | Notes |
|---|---|---|---|
| ”add industry” | llm | select with labels | Classification from profile, no web research needed |
| ”add funding” | research_pro | text | Needs web research |
| ”classify by vertical” | llm | select with labels | Classification |
| ”find their tech stack” | research_pro | text | Needs web research |
| ”score fit 1-5” | llm or research_reasoning | grade | Assessment |
| ”tag multiple categories” | llm | multiselect with labels | Multiple tags |
list-enrichment skill for full column types and output formats.Trigger enrichment
Run via
POST /tables/{table_id}/run with { "mode": "new", "columns": [new_column_ids] }, scoped to only the newly added agent columns.If no agent columns were added, skip this step.Input Parsing Patterns
Freeform pasted list (5-line groups)
CSV
Map columns: look for “website”, “url”, “domain”, “Company Website”. Extract domain from whichever column contains URLs.Single-column domain list
Common Pitfalls
Example: Create Table and Upload
Output
Always provide the user with:- Direct link to the table:
https://app.extruct.ai/tables/{table_id} - Summary of what was uploaded
- Next steps (e.g., “Run
list-enrichmentto add custom columns”)