Skip to main content
A custom column holds data you already have. A smart column holds data you do not: you write a question in plain English, and Fuse answers it for every row in the list. Every endpoint here needs a key with the lists scope. Smart columns bill per row, so read Bounding the spend before running one over a large list.

Two engines

The engine decides how the answer is found, and how much it costs.

standard

Answers each row with a fast research agent that searches the web, reads pages and looks up LinkedIn profiles. Fast and cheap.

deep_research

Researches each row against live sources before answering. Slower, costs more, and can be restricted to chosen providers.

Create one

POST /business/lists/{listId}/smart-columns needs a name, a prompt and a runOn. It answers 202 — the column exists immediately, the answers arrive over the following minutes.
Keep the jobId. It is how you follow the run.

Writing a prompt that answers well

The prompt is free text, and the shape of the answer follows the shape of the question. Ask for what you want back:
  • Say what a good answer looks like. “Answer yes or no and name the role” produces a column you can filter on. “Tell me about their hiring” produces a paragraph.
  • Name the subject. The row is a contact or a company; say which one you mean.
  • Keep it to one question. Two questions in one prompt gives you two half-answers in one cell.
  • Plan for filtering. Row filters match text anywhere in a cell and ignore case. If you will filter on the answer, ask for exactly one word, such as yes or no, so a “no” answer can never contain “yes”. The qualify leads workflow shows the pattern end to end.

Choosing what it runs on

runOn decides the initial scope, and it is the main lever on cost: Start with first_100, read the answers and fix the prompt. Then re-run with new_only to answer the rest of the list without paying for the sample rows twice. Add filters, in the same row filter language as GET /business/lists/{listId}/rows, to cover only matching rows. A filter that matches nothing is refused with 422 NO_ROWS_TO_RESEARCH before anything is charged.

Follow the run

GET /business/lists/{listId}/smart-columns/{jobId}/status reports progress and, importantly, what has been spent so far.
Rows can fail individually — a company with nothing findable, a research provider timing out — and failedRows counts them. The run still finishes, as partially_completed, and those cells stay empty. Poll until status is completed, partially_completed, failed or cancelled; a run is cancelled when a newer run or a prompt edit replaces it.

Read the answers

The values land on the list rows themselves. GET /business/lists/{listId}/rows returns them alongside every other column, so filtering, sorting and exporting all work on smart column output. For any smart column you can also ask how an individual answer was reached:
That is the audit trail for an answer you intend to act on. Personalize every email with AI research uses it to check opening lines before they are sent.

Change the question

PATCH /business/lists/{listId}/smart-columns/{columnId} updates the name, prompt or provider restriction. The engine is fixed when the column is created, so sending engine is a 422.
Editing the prompt is not free. Fuse cancels whatever run is in flight and starts a billed refresh over the column’s rows, because the old answers no longer match the question. The response carries a jobId when that happens — a rename returns jobId: null.

Re-run it

POST /business/lists/{listId}/smart-columns/{columnId}/rerun fills answers in again. mode decides which rows: mode defaults to all, the more expensive choice. Either mode cancels a run that is still in progress. The balance must cover every row the run will answer before it starts, and each row is then charged as it is answered. GET /business/lists/{listId}/smart-columns/{columnId} shows creditsPerRow, so you can price a run before you start it.

Bounding the spend

Smart columns bill per row answered: 20 credits a row with standard and 100 with deep_research. Rows that fail are free. Three habits keep it predictable:
1

Prototype on first_100

Read the answers before spending on the whole list.
2

Top up with new_only

After an import, re-run only the new rows instead of the whole column.
3

Watch creditsUsed on the job

The status endpoint reports spend while the run is still going, so a runaway prompt is visible before it finishes.
GET /business/credits shows the balance the run draws from. See Credits.

Errors worth handling