FutureSearch Logofuturesearch
  • Blog
  • Solutions
  • Research
  • Docs
  • Evals
  • Company
  • Get Researchers
FutureSearch Logo

General inquiry? You can reach us at hello@futuresearch.ai.

Company

Team & CareersPressPrivacy PolicyTerms of Service

Developers

SDK DocsAPI ReferenceCase StudiesGitHub

Follow Us

X (Twitter)@dschwarz26LinkedIn
FutureSearchdocs
Your research team
Installation
  • All install methods
  • Claude.ai
  • Claude Cowork
  • Claude Code
  • Web App
  • Python SDK
  • Skill
  • MCP Server
Reference
  • API Key
  • classify
  • dedupe
  • forecast
  • merge
  • rank
  • agent_map
  • screen
  • Progress Monitoring
  • Chaining Operations
Guides
  • LLM-Powered Data Labeling
  • Add a Column via Web Research
  • Classify and Label Rows
  • Deduplicate Training Data
  • Filter a Dataset Intelligently
  • Join Tables Without Shared Keys
  • Rank Data by External Metrics
  • Resolve Duplicate Entities
  • Scale Deduplication to 20K Rows
Case Studies
  • Deduplicate Contact Lists
  • Deduplicate CRM Records
  • Enrich Contacts with Company Data
  • Fuzzy Match Across Tables
  • Link Records Across Medical Datasets
  • LLM Cost vs. Accuracy
  • Merge Costs and Speed
  • Merge Thousands of Records
  • Multi-Stage Lead Qualification
  • Research and Rank Web Data
  • Run 10,000 LLM Web Research Agents
  • Score Cold Leads via Web Research
  • Score Leads from Fragmented Data
  • Screen 10,000 Rows
  • Screen Job Listings
  • Screen Stocks by Economic Sensitivity
  • Screen Stocks by Investment Thesis
FutureSearchby futuresearch
by futuresearch

Add a Column via Web Research

Go to futuresearch.ai/app, upload saas_products.csv, and enter:

For each product, find the annual price of its lowest paid tier. Visit the product's pricing page to find this. If only monthly pricing is shown, multiply by 12. Return the price and the tier name. If no paid tier exists, use 0.

All 246 products researched in about 5.5 minutes. 45 products (18.3%) correctly reported $0 for usage-based or non-public pricing.

Add the everyrow connector if you haven't already. Then upload saas_products.csv and ask Claude:

For each product, find the annual price of its lowest paid tier. Visit the product's pricing page to find this. If only monthly pricing is shown, multiply by 12. Return the price and the tier name. If no paid tier exists, use 0.

All 246 products researched in about 5.5 minutes. 45 products (18.3%) correctly reported $0 for usage-based or non-public pricing.

Ask Claude Code to find the pricing for a SaaS product and it will search the web and give you an answer. Doing that for 246 products means visiting 246 separate pricing pages, each with a different layout and pricing model. That volume of web research needs to happen in parallel.

Here, we get Claude Code to find the annual price of the lowest paid tier for 246 SaaS products, by visiting each product's pricing page.

MetricValue
Rows246
Cost$5.28
Time5.5 minutes
Success rate100%

Add everyrow to Claude Code if you haven't already:

claude mcp add futuresearch --scope project --transport http https://mcp.futuresearch.ai/mcp

Download the dataset: saas_products.csv (246 SaaS and developer tools like Slack, Notion, Asana). With the CSV in your working directory, tell Claude:

For each product in saas_products.csv, find the annual price of its lowest paid tier.
Visit the product's pricing page to find this. If only monthly pricing is shown,
multiply by 12. Return the price and the tier name. If no paid tier exists, use 0.

Claude calls everyrow's agent MCP tool to dispatch web research agents for every row:

Tool: everyrow_agent
├─ task: "Find the pricing for this SaaS product's lowest paid tier..."
├─ input_csv: "/Users/you/saas_products.csv"
└─ response_schema: {"lowest_paid_tier_annual_price": "float", "tier_name": "string"}

→ Submitted: 246 rows for processing.
  Session: https://futuresearch.ai/sessions/5c19ee04-f1ac-45c6-bf01-a2b77515011b
  Task ID: 5c19...

Tool: everyrow_progress
├─ task_id: "5c19..."
→ Running: 0/246 complete, 246 running (15s elapsed)

Tool: everyrow_progress
→ Running: 123/246 complete, 123 running (150s elapsed)

...

Tool: everyrow_progress
→ Completed: 246/246 (0 failed) in 327s.

Tool: everyrow_results
├─ task_id: "5c19..."
├─ output_path: "/Users/you/saas_pricing.csv"
→ Saved 246 rows to /Users/you/saas_pricing.csv

All 246 products researched in 5.5 minutes. View the session.

ProductAnnual PriceTier
1Password$35.88Individual
Airtable$240.00Team
Amplitude$588.00Plus
Notion$96.00Plus
Slack$87.00Pro

45 products (18.3%) correctly reported $0 for products with usage-based pricing (AWS ECR, Anthropic API) or no public pricing. Each result includes a research trail showing how the agent found the answer, with citations linking back to sources.

pandas.apply() runs a local function on each row. But it can't use LLM judgment or do web research to find new values. The everyrow SDK dispatches web research agents to look up data for every row in parallel.

This guide shows how to add a pricing column for 246 SaaS products in a single method call.

MetricValue
Rows246
Cost$6.68
Time15.7 minutes
Success rate99.6% (1 failed)
Sessionview
pip install everyrow
export EVERYROW_API_KEY=your_key_here  # Get one at futuresearch.ai/api-key

The dataset is a list of 246 SaaS and developer tools. To follow along, right click this link and save the CSV file to your computer. We find the annual price of each product's lowest paid tier, which requires visiting pricing pages that change frequently and present information in different formats.

import asyncio
import pandas as pd
from pydantic import BaseModel, Field
from everyrow import create_session
from everyrow.ops import agent_map

class PricingInfo(BaseModel):
    lowest_paid_tier_annual_price: float = Field(
        description="Annual price in USD for the lowest paid tier. "
                    "Use monthly price * 12 if only monthly shown. "
                    "0 if no paid tier exists."
    )
    tier_name: str = Field(
        description="Name of the lowest paid tier (e.g. 'Pro', 'Starter', 'Basic')"
    )

async def main():
    df = pd.read_csv("saas_products.csv")  # Single column: product

    async with create_session(name="SaaS pricing lookup") as session:
        result = await agent_map(
            session=session,
            task="""
                Find the pricing for this SaaS product's lowest paid tier.
                Visit the product's pricing page to find this information.

                Look for the cheapest paid plan (not free tier). Report:
                - The annual price in USD (if monthly, multiply by 12)
                - The name of that tier

                If the product has no paid tier or pricing isn't public, use 0.
            """,
            input=df,
            response_model=PricingInfo,
        )
    print(result.data)

asyncio.run(main())
         product       tier_name  lowest_paid_tier_annual_price
0         Notion            Plus                          96.00
1          Slack             Pro                          87.00
2          Asana         Starter                         131.88
3     Monday.com           Basic                         108.00
4         Trello        Standard                          60.00
5           Jira        Standard                          94.92
6         Linear           Basic                         120.00
7        ClickUp       Unlimited                          84.00
...

Each result includes a research column showing how the agent found the answer, with citations linking back to sources. The key to doing this cheaply is in the orchestration of the web research agents, using the right batching, parallelism, LLMs, search tools, and page reading tools.


Built with everyrow. See the agent_map documentation for more options including response models and effort levels.