Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Bulk LLM Runner: Run ChatGPT, Claude, Gemini & DeepSeek Prompts in Bulk or on Every Excel Row (No API Key)

Run on Apify Models Input API key Web search

Run hundreds of prompts at once, or ChatGPT-style AI on every row of an Excel or CSV file, across GPT, Claude, Gemini, Perplexity, DeepSeek, Qwen and 350+ models, with web search, JSON columns and side-by-side model comparison. No API key.

Bulk LLM Runner replaces copy-pasting prompts into ChatGPT one by one, and pasting spreadsheet rows into an AI chat and copying answers back by hand. Upload a spreadsheet or paste prompts, pick a model, and get a clean table back. Model usage is billed through your Apify account, so there is no OpenAI, Anthropic, Google or Perplexity key to set up. This repository documents the Apify Actor and gives working Python, JavaScript and cURL examples for calling it through the API.

What the bulk LLM runner does

  • Run a list of prompts in bulk: 10, 100 or 1,000 prompts, up to 8 in parallel, one answer per row.
  • Run AI on every spreadsheet row: upload Excel, CSV or a Google Sheets link, write one prompt with {{Column}} placeholders, and get your file back with the answers as new columns.
  • Answer columns named for you: ask in plain words and the answers land in clean, consistent columns.
  • Yes / no checklists per row, with evidence and a source link for every answer.
  • Live web search for current facts and sources.
  • Compare ChatGPT vs Claude vs Gemini side by side on the same prompts.
  • Read PDFs, web pages and images, and return strict JSON when you need it.

Output: what you get

One row per prompt (or per spreadsheet row):

Field Description
prompt / response The prompt and the model answer
Answer columns Named columns extracted from the answer
model Model that answered
cost_usd What the call cost
error Error, if a call failed
Spreadsheet columns Your original columns, when you uploaded a file
Excel file Your spreadsheet back with the AI answers added

Input

The main input fields:

Field What it does
prompts One prompt per line, or a template with {{Column}} placeholders
spreadsheet_file / sheet_name Excel, CSV or Google Sheets input
checklist_items Items to answer yes, no or unknown for each row
model / custom_model GPT, Claude, Gemini, DeepSeek, Qwen, or any model id
enable_web_search Search the web before answering
compare_models Extra models to run on the same prompts
response_format / json_schema Plain text or structured JSON
image_urls Images for vision models

Use cases

  • Data enrichment: add company, contact or product facts to every row of a spreadsheet.
  • SEO product descriptions in bulk.
  • Classify customer reviews, tickets or survey answers.
  • Lead research with web search and source links.
  • Model evaluation: compare GPT, Claude and Gemini on your own prompts.

Ready-made examples you can run in one click:

  • Write SEO product descriptions in bulk: Feed it one line per product and get back a structured description for each: a short benefit led paragraph, a set of feature bullets and a meta description. Output arrives as JSON columns you can paste straight into a product feed. Runs on GPT, Claude or Gemini without an OpenAI, Anthropic or Google API key of your own.

Quick start

1. In the browser (no code)

  1. Open the Actor on Apify and click Try for free.
  2. Paste your prompts, or upload a spreadsheet and write one prompt with {{Column}} placeholders, then pick a model.
  3. Click Start, then download the table or your spreadsheet with answers from the Output tab.

2. Through the API

  1. Create a free Apify account and copy your API token from Settings > Integrations.
  2. Set it as an environment variable: export APIFY_TOKEN=... (PowerShell: $env:APIFY_TOKEN="...").
  3. Edit input.json and run one of the examples below.

Python

pip install apify-client
python examples/python/run_actor.py
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("fayoussef/bulk-llm-runner").call(run_input={'prompts': ['Product: Patagonia Nano Puff insulated jacket. Write a 60 word benefit '
             'led description, 4 feature bullets, and a 155 character meta '
             'description.',
             'Product: Hydro Flask 32oz wide mouth water bottle. Write a 60 word '
             'benefit led description, 4 feature bullets, and a 155 character meta '
             'description.',
             'Product: Anker 737 140W USB-C power bank. Write a 60 word benefit led '
             'description, 4 feature bullets, and a 155 character meta description.',
             'Product: Brooks Ghost 16 neutral running shoe. Write a 60 word benefit '
             'led description, 4 feature bullets, and a 155 character meta '
             'description.'],
 'system_prompt': 'You are a senior ecommerce SEO copywriter. Write in plain, concrete '
                  'language. Never invent specifications you were not given. Return '
                  'the keys description, bullets and meta_description.',
 'model': 'anthropic/claude-haiku-4.5',
 'response_format': 'json_object',
 'enable_web_search': False,
 'temperature': 60,
 'concurrency': 4})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

JavaScript / Node.js

npm install apify-client
node examples/javascript/run_actor.mjs
import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("fayoussef/bulk-llm-runner").call({
    "prompts": [
        "Product: Patagonia Nano Puff insulated jacket. Write a 60 word benefit led description, 4 feature bullets, and a 155 character meta description.",
        "Product: Hydro Flask 32oz wide mouth water bottle. Write a 60 word benefit led description, 4 feature bullets, and a 155 character meta description.",
        "Product: Anker 737 140W USB-C power bank. Write a 60 word benefit led description, 4 feature bullets, and a 155 character meta description.",
        "Product: Brooks Ghost 16 neutral running shoe. Write a 60 word benefit led description, 4 feature bullets, and a 155 character meta description."
    ],
    "system_prompt": "You are a senior ecommerce SEO copywriter. Write in plain, concrete language. Never invent specifications you were not given. Return the keys description, bullets and meta_description.",
    "model": "anthropic/claude-haiku-4.5",
    "response_format": "json_object",
    "enable_web_search": false,
    "temperature": 60,
    "concurrency": 4
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

cURL (plain HTTP)

Runs the Actor and returns the dataset items in one synchronous call:

curl -X POST "https://api.apify.com/v2/acts/fayoussef~bulk-llm-runner/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d @input.json

Synchronous calls time out after 300 seconds. For larger runs use the client libraries above, or start the run with POST /v2/acts/fayoussef~bulk-llm-runner/runs and read the dataset when it finishes.

Sample output

One record, from sample-output.json. Export the full dataset as JSON, CSV, Excel or HTML from the Apify Console, or read it through the API as shown above.

{
  "prompt": "Write a 60-word product description for a waterproof hiking backpack. Return title, description and 5 keywords.",
  "model": "anthropic/claude-haiku-4.5",
  "title": "StormGuard 30L Waterproof Hiking Backpack",
  "description": "Built for wet trails and sudden downpours...",
  "keywords": [
    "waterproof backpack",
    "hiking daypack",
    "rain-proof rucksack",
    "30L backpack",
    "outdoor gear"
  ],
  "tools_used": [
    "web_search"
  ],
  "cost_usd": 0.0012,
  "error": null
}

Integrations and automation

  • Schedule it to run the same prompts on new data every day.
  • Send results to Google Sheets, Airtable, Slack, a webhook, Make, Zapier or n8n with Apify integrations.
  • Use it from AI agents through the Apify MCP server.

FAQ

How do I run ChatGPT on every row of an Excel or CSV file?

Upload the file, write one prompt with {{Column name}} placeholders, pick a GPT model and run. You get your file back with the answers as new columns.

Can I use ChatGPT, Claude or Gemini without an API key?

Yes. Model usage is billed through your Apify account.

How many prompts can I run at once?

Hundreds or thousands, up to 8 in parallel.

Can I compare ChatGPT, Claude and Gemini on the same prompts?

Yes. Add extra models in compare_models and get the answers side by side.

Does it search the web?

Yes. Turn on web search and any model can look up current facts, with source links.

Can it return clean JSON or spreadsheet columns?

Yes. Ask for the fields you want, or supply a JSON schema for strict output.

Can I connect it to Google Sheets, Zapier, Make or n8n?

Yes, through Apify integrations or the API.

Pricing

Pay per use on Apify: you are charged per event (results produced), with no subscription to this Actor. The current rate is shown on the Actor's Store page. Free-plan runs are capped; an Apify plan unlocks full runs.

Related tools by AutomationByExperts

Support

Questions, bugs or a custom tool: open an issue here, use the Issues tab on the Apify page, or email youssefarhan24@gmail.com.

License

The example code in this repo is MIT licensed. The Actor itself runs on Apify under its own terms.

About

Run hundreds of prompts in parallel, or AI on every row of an Excel, CSV or Google Sheet, across GPT, Claude, Gemini, Perplexity, DeepSeek, Qwen and 350+ models. Web search, JSON columns, model comparison. No API key.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors