Freegent is a general-purpose AI research agent for spreadsheets, similar to a self-hosted Clay research column.
Give it any CSV and a prompt. Freegent researches every row and returns the same CSV with one new answer column.
See the project documentation for architecture, setup, development, OpenExtract, and the roadmap. The Freegent and Claygent comparison documents a reproducible cost benchmark.
Freegent uses OpenExtract to fetch and render page content. Its source code does not live in this repository. OpenExtract is maintained as a separate public source repository:
- source: github.com/simonbalfe/openextract
- public image:
ghcr.io/simonbalfe/openextract:latest
Freegent's Docker Compose stack pulls that image. See the OpenExtract integration documentation for the service boundary and configuration.
Start with:
subject,type,url
Figma,company,https://figma.com
Dario Amodei,person,
EU AI Act,topic,Run:
freegent \
--csv research.csv \
--instructions "Use current primary sources. Do not guess unsupported facts." \
--prompt "Research {{subject}}, which is a {{type}}. Use {{url}} when supplied. Return a concise factual brief." \
> results.csvYou get:
subject,type,url,answer
Figma,company,https://figma.com,...
Dario Amodei,person,,...
EU AI Act,topic,,...Use Freegent for:
- account research
- people and role research
- market and competitor research
- product comparisons
- news and buying signals
- URL extraction and summarization
- row classification, scoring, and verification
- lead qualification and sales personalization
Set APIFY_API_TOKEN to let the agent pull structured LinkedIn data through Apify. It can retrieve person profiles, recent person or company posts, post reactions, employees filtered by title or query, and company firmographics. Apify actors cost credits. Freegent starts each actor, polls it for up to 150 seconds, then reads the resulting dataset and records the billed run cost.
LinkedIn profile and post URLs must come from the input row or evidence gathered during research. Freegent does not invent them.
You need:
- Docker
- an OpenRouter API key
- at least one search key from Serper, Exa, or Tavily
You can add all three search keys to improve coverage and fallback. You can also add an optional Apify API token for LinkedIn profiles, posts, reactions, employee search, company firmographics, and Crunchbase company enrichment.
Run the installer:
curl -fsSL https://raw.githubusercontent.com/simonbalfe/freegent/main/install.sh | bashEnter your keys when asked. The installer starts Freegent and installs the freegent command.
It stops before starting Docker unless an OpenRouter key and at least one Serper, Exa, or Tavily search key are present.
The installer pulls prebuilt images and extracts the native CLI, Compose file, and agent skill. It does not clone the repository or require Go.
Check that it worked:
freegent --helpOpen http://localhost:8080/dashboard after installation.
The dashboard provides a full-width spreadsheet for every research job. Use it to:
- upload a CSV and start a job
- follow row progress and inspect failures
- view generated output as new spreadsheet columns
- open a row's sources, agent trace, tokens, and cost
- review the prompt and output schema
- see whole-sheet usage and cost totals
- download the enriched CSV
freegent \
--csv research.csv \
--instructions "Use current evidence and clearly state uncertainty." \
--prompt "Research {{subject}} and answer using current evidence." \
> results.csvAny CSV header can be used in the prompt with {{field_name}}.
Each row is a separate research task. Your rows can contain companies, people, products, URLs, markets, topics, or anything else the agent can research.
--instructions applies the same research rules to the whole job. --prompt is rendered separately for each row using its CSV values.
freegent \
--row '{"subject":"EU AI Act","question":"What changed most recently?"}' \
--instructions "Prefer official EU sources and identify the effective date." \
--prompt "Research {{subject}} and answer: {{question}}"Freegent returns a text answer by default. Use --schema when every answer needs the same fields:
freegent \
--csv research.csv \
--prompt "Research {{subject}} and classify the result." \
--schema '{"summary":"string","category":"string","source":"string"}' \
> structured-results.csvThe structured result is stored inside the single answer column.
Use --detach to let a job continue without keeping the terminal open:
freegent \
--csv research.csv \
--prompt "Research {{subject}}." \
--detachFreegent returns the job ID, dashboard link, and download link.
Check that everything is running:
cd ~/freegent
docker compose psView logs:
docker compose logs -f api worker openextractUpdate:
curl -fsSL https://raw.githubusercontent.com/simonbalfe/freegent/main/install.sh | bashUninstall everything except saved provider keys:
curl -fsSL https://raw.githubusercontent.com/simonbalfe/freegent/main/uninstall.sh | bashJobs and results are saved locally and survive restarts.