Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"name": "everyrow",
"source": "./",
"description": "Give Claude Code a research team. Forecast, score, classify, or research every row of a dataset.",
"version": "0.4.0"
"version": "0.4.1"
}
]
}
2 changes: 1 addition & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "everyrow",
"description": "Give Claude Code a research team. Forecast, score, classify, or research every row of a dataset.",
"version": "0.4.0",
"version": "0.4.1",
"author": {
"name": "FutureSearch"
},
Expand Down
22 changes: 11 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ Spin up a team of:
| [**Agents**](https://everyrow.io/docs/reference/RESEARCH) | Research, then analyze | 1–3¢/researcher | 10k rows |
| [**Forecasters**](https://everyrow.io/docs/reference/FORECAST) | Predict outcomes | 20-50¢/researcher | 10k rows |
| [**Scorers**](https://everyrow.io/docs/reference/RANK) | Research, then score | 1-5¢/researcher | 10k rows |
| [**Classifiers**](https://everyrow.io/docs/reference/SCREEN) | Research, then categorize | 0.1-0.7¢/researcher | 10k rows |
| [**Classifiers**](https://everyrow.io/docs/reference/CLASSIFY) | Research, then categorize | 0.1-0.7¢/researcher | 10k rows |
| [**Matchers**](https://everyrow.io/docs/reference/MERGE) | Find matching rows | 0.2-0.5¢/researcher | 20k rows |

See the full [API reference](https://everyrow.io/docs/api), [guides](https://everyrow.io/docs/guides), and [case studies](https://everyrow.io/docs/case-studies), (for example, see our [case study](https://everyrow.io/docs/case-studies/llm-web-research-agents-at-scale) running a `Research` task on 10k rows, running agents that used 120k LLM calls.)
Expand Down Expand Up @@ -203,23 +203,23 @@ Requires Python 3.12+. Then you can use the SDK directly:
```python
import asyncio
import pandas as pd
from everyrow.ops import screen
from pydantic import BaseModel, Field
from everyrow.ops import classify

companies = pd.DataFrame([
{"company": "Airtable",}, {"company": "Vercel",}, {"company": "Notion",}
{"company": "Apple"}, {"company": "JPMorgan Chase"}, {"company": "ExxonMobil"},
{"company": "Tesla"}, {"company": "Pfizer"}, {"company": "Duke Energy"},
])

class JobScreenResult(BaseModel):
qualifies: bool = Field(description="True if company lists jobs with all criteria")

async def main():
result = await screen(
task="""Qualifies if: 1. Remote-friendly, 2. Senior, and 3. Discloses salary""",
result = await classify(
task="Classify this company by its GICS industry sector",
categories=["Energy", "Materials", "Industrials", "Consumer Discretionary",
"Consumer Staples", "Health Care", "Financials",
"Information Technology", "Communication Services",
"Utilities", "Real Estate"],
input=companies,
response_model=JobScreenResult,
)
print(result.data.head())
print(result.data[["company", "classification"]])

asyncio.run(main())
```
Expand Down
18 changes: 16 additions & 2 deletions docs/api.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
---
title: API Reference
description: Complete API reference for everyrow — screen, rank, dedupe, merge, forecast, and research operations powered by LLM web research agents.
description: Complete API reference for everyrow — screen, rank, dedupe, merge, classify, forecast, and research operations powered by LLM web research agents.
---

# API Reference

Six operations for processing data with LLM-powered web research agents. Each takes a DataFrame and a natural-language instruction.
Seven operations for processing data with LLM-powered web research agents. Each takes a DataFrame and a natural-language instruction.

## screen

Expand Down Expand Up @@ -55,6 +55,20 @@ result = await merge(task=..., left_table=df1, right_table=df2)
Guides: [Fuzzy Join Without Matching Keys](/docs/fuzzy-join-without-keys)
Case Studies: [LLM Merging at Scale](/docs/case-studies/llm-powered-merging-at-scale), [Match Software Vendors to Requirements](/docs/case-studies/match-software-vendors-to-requirements)

## classify

```python
result = await classify(
task="Classify each company by its primary industry sector",
categories=["Technology", "Finance", "Healthcare", "Energy"],
input=companies_df,
)
```

`classify` assigns each row in a DataFrame to one of the provided categories using web research that scales to the difficulty of the classification. Supports binary (yes/no) and multi-category classification with optional reasoning output.

[Full reference →](/docs/reference/CLASSIFY)

## forecast

```python
Expand Down
10 changes: 9 additions & 1 deletion docs/case-studies.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
---
title: Case Studies
description: Runnable case studies demonstrating everyrow operations on real datasets — screen, rank, dedupe, merge, and research with LLM-powered agents.
description: Runnable case studies demonstrating everyrow operations on real datasets — classify, screen, rank, dedupe, merge, forecast, and research with LLM-powered agents.
---

# Case Studies

Runnable case studies with real datasets. Each case study demonstrates an everyrow operation end-to-end with output you can inspect.

## Classify

- [Classify and Label Data](/docs/classify-dataframe-rows-llm)

## Screen

- [Screen 10,000 Rows](/docs/case-studies/llm-powered-screening-at-scale)
Expand All @@ -33,6 +37,10 @@ Runnable case studies with real datasets. Each case study demonstrates an everyr
- [Link Records Across Medical Datasets](/docs/case-studies/match-clinical-trials-to-papers)
- [Merge Costs and Speed](/docs/case-studies/understanding-costs-and-speed-for-merge)

## Forecast

- [Automating Forecasting Questions](https://futuresearch.ai/automating-forecasting-questions/)

## Multi-Method

- [Multi-Stage Lead Qualification](/docs/case-studies/multi-stage-lead-qualification)
Expand Down
16 changes: 9 additions & 7 deletions docs/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,13 +150,15 @@ df = await fetch_task_data("12345678-1234-1234-1234-123456789abc")

## Operations

| Operation | Description |
| ------------------------------- | ------------------------------------------ |
| [Screen](/reference/SCREEN) | Filter rows by criteria requiring judgment |
| [Rank](/reference/RANK) | Score rows by qualitative factors |
| [Dedupe](/reference/DEDUPE) | Deduplicate when fuzzy matching fails |
| [Merge](/reference/MERGE) | Join tables when keys don't match exactly |
| [Research](/reference/RESEARCH) | Run web agents to research each row |
| Operation | Description |
| --------------------------------- | ------------------------------------------ |
| [Classify](/reference/CLASSIFY) | Categorize rows into predefined classes |
| [Screen](/reference/SCREEN) | Filter rows by criteria requiring judgment |
| [Rank](/reference/RANK) | Score rows by qualitative factors |
| [Dedupe](/reference/DEDUPE) | Deduplicate when fuzzy matching fails |
| [Merge](/reference/MERGE) | Join tables when keys don't match exactly |
| [Forecast](/reference/FORECAST) | Predict probabilities for binary questions |
| [Research](/reference/RESEARCH) | Run web agents to research each row |

## See Also

Expand Down
11 changes: 9 additions & 2 deletions docs/guides.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
---
title: Guides
description: Step-by-step tutorials for using everyrow to screen, rank, dedupe, merge, and research data with LLM-powered agents.
description: Step-by-step tutorials for using everyrow to classify, screen, rank, dedupe, merge, forecast, and research data with LLM-powered agents.
---

# Guides

Practical walkthroughs that show you how to use everyrow for common data processing tasks. Each guide covers a single operation end-to-end with working code.

## Classify

- [Classify and Label Rows](/docs/classify-dataframe-rows-llm)

## Screen

- [Filter a Dataset Intelligently](/docs/filter-dataframe-with-llm)
Expand All @@ -25,8 +29,11 @@ Practical walkthroughs that show you how to use everyrow for common data process

- [Join Tables Without Shared Keys](/docs/fuzzy-join-without-keys)

## Forecast

- [Forecast Binary Questions](/docs/reference/FORECAST)

## Research

- [Add a Column via Web Research](/docs/add-column-web-lookup)
- [Classify and Label Rows](/docs/classify-dataframe-rows-llm)
- [LLM-Powered Data Labeling](/docs/active-learning-llm-oracle)
23 changes: 23 additions & 0 deletions docs/mcp-server.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,29 @@ Join two CSVs using intelligent entity matching (LEFT JOIN semantics).

Returns `task_id` and `session_url`. Call `everyrow_progress` to monitor.

### everyrow_classify

Classify each row into one of the provided categories.

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `task` | string | Yes | Classification instructions. |
| `categories` | list[string] | Yes | Allowed categories (minimum 2). Each row is assigned exactly one. |
| `classification_field` | string | No | Output column name (default: `"classification"`). |
| `include_reasoning` | boolean | No | Include a reasoning column (default: false). |

Returns `task_id` and `session_url`. Call `everyrow_progress` to monitor.

### everyrow_forecast

Forecast the probability of binary questions.

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `context` | string | No | Optional batch-level context for all questions. |

Returns `task_id` and `session_url`. Call `everyrow_progress` to monitor.

### everyrow_agent

Run web research agents on each row.
Expand Down
113 changes: 113 additions & 0 deletions docs/reference/CLASSIFY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
---
title: classify
description: API reference for the EveryRow classify tool, which assigns each row of a dataset into one of the provided categories using web research.
---

# Classify

`classify` takes a DataFrame and a list of allowed categories, then assigns each row to exactly one category using web research that scales to the difficulty of the classification. Supports binary (yes/no) and multi-category classification with optional reasoning output.

## Examples

### GICS sector classification

```python
from pandas import DataFrame
from everyrow.ops import classify

companies = DataFrame([
{"company": "Apple"},
{"company": "JPMorgan Chase"},
{"company": "ExxonMobil"},
{"company": "Pfizer"},
{"company": "Procter & Gamble"},
{"company": "Tesla"},
{"company": "AT&T"},
{"company": "Caterpillar"},
{"company": "Duke Energy"},
{"company": "Simon Property Group"},
])

result = await classify(
task="Classify this company by its GICS industry sector",
categories=[
"Energy", "Materials", "Industrials", "Consumer Discretionary",
"Consumer Staples", "Health Care", "Financials",
"Information Technology", "Communication Services",
"Utilities", "Real Estate",
],
input=companies,
)
print(result.data[["company", "classification"]])
```

Output:

| company | classification |
|----------------------|------------------------|
| Apple | Information Technology |
| JPMorgan Chase | Financials |
| ExxonMobil | Energy |
| Pfizer | Health Care |
| Procter & Gamble | Consumer Staples |
| Tesla | Consumer Discretionary |
| AT&T | Communication Services |
| Caterpillar | Industrials |
| Duke Energy | Utilities |
| Simon Property Group | Real Estate |

### Binary classification

For yes/no questions, use two categories:

```python
result = await classify(
task="Is this company founder-led?",
categories=["yes", "no"],
input=companies,
)
```

### Custom output column and reasoning

```python
result = await classify(
task="Classify each company by its primary industry sector",
categories=["Technology", "Finance", "Healthcare", "Energy"],
input=companies,
classification_field="sector",
include_reasoning=True,
)
print(result.data[["company", "sector", "reasoning"]])
```

## Parameters

| Name | Type | Default | Description |
|------|------|---------|-------------|
| `task` | str | required | Natural-language instructions describing how to classify each row |
| `categories` | list[str] | required | Allowed category values (minimum 2). Each row is assigned exactly one. |
| `input` | DataFrame | required | Rows to classify |
| `classification_field` | str | `"classification"` | Name of the output column for the assigned category |
| `include_reasoning` | bool | `False` | If True, adds a `reasoning` column with the agent's justification |
| `session` | Session | Optional, auto-created if omitted | |

## Output

One column is added to each input row (name controlled by `classification_field`):

| Column | Type | Description |
|--------|------|-------------|
| `classification` | str | One of the provided `categories` values |
| `reasoning` | str | Agent's justification (only if `include_reasoning=True`) |

## Via MCP

MCP tool: `everyrow_classify`

| Parameter | Type | Description |
|-----------|------|-------------|
| `task` | string | Classification instructions |
| `categories` | list[string] | Allowed categories (minimum 2) |
| `classification_field` | string | Output column name (default: `"classification"`) |
| `include_reasoning` | boolean | Include reasoning column (default: false) |
27 changes: 26 additions & 1 deletion everyrow-mcp/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

MCP (Model Context Protocol) server for [everyrow](https://everyrow.io): agent ops at spreadsheet scale.

This server exposes everyrow's 5 core operations as MCP tools, allowing LLM applications to screen, rank, dedupe, merge, and run agents on CSV files.
This server exposes everyrow's core operations as MCP tools, allowing LLM applications to classify, screen, rank, dedupe, merge, forecast, and run agents on CSV files.

**All tools operate on local CSV files.** Provide absolute file paths as input, and transformed results are written to new CSV files at your specified output path.

Expand Down Expand Up @@ -116,6 +116,31 @@ Parameters:

Example: Match software products (left, enriched) to parent companies (right, lookup): Photoshop -> Adobe

### everyrow_classify

Classify each row into one of the provided categories.

```
Parameters:
- task: Natural language classification instructions
- categories: Allowed categories (minimum 2)
- classification_field: (optional) Output column name (default: "classification")
- include_reasoning: (optional) Include reasoning column (default: false)
```

Example: Classify companies by GICS sector with categories ["Energy", "Financials", "Information Technology", ...]

### everyrow_forecast

Forecast the probability of binary questions.

```
Parameters:
- context: (optional) Batch-level context for all questions
```

Example: "Will the US Federal Reserve cut rates before July 2027?"

### everyrow_agent

Run web research agents on each row of a CSV.
Expand Down
8 changes: 6 additions & 2 deletions everyrow-mcp/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"manifest_version": "0.4",
"name": "everyrow-mcp",
"display_name": "Everyrow MCP Server",
"version": "0.4.0",
"version": "0.4.1",
"description": "Give your AI a research team. Forecast, score, classify, or research every row of a dataset.",
"long_description": "MCP server for everyrow: give your AI a research team. Each operation dispatches web research agents across a dataset to forecast, score, classify, deduplicate, merge, or research at scale.",
"author": {
Expand Down Expand Up @@ -53,6 +53,10 @@
"name": "everyrow_forecast",
"description": "Forecast the probability of binary questions from a CSV file."
},
{
"name": "everyrow_classify",
"description": "Classify each row of a dataset into one of the provided categories."
},
{
"name": "everyrow_single_agent",
"description": "Run a single web research agent on a task, optionally with context data."
Expand Down Expand Up @@ -97,7 +101,7 @@
"python": ">=3.12"
}
},
"keywords": ["everyrow", "dataframe", "csv", "ai", "data-processing", "dedupe", "merge", "rank", "screen"],
"keywords": ["everyrow", "dataframe", "csv", "ai", "data-processing", "classify", "dedupe", "merge", "rank", "screen", "forecast"],
"license": "MIT",
"privacy_policies": ["https://futuresearch.ai/privacy/"]
}
Loading