/enrich-excel
Enrich a live Excel spreadsheet by researching missing data with TinyFish and writing results directly into the running Excel app via AppleScript. Use when a user says "fill in my spreadsheet", "enrich this Excel file", "research and fill missing data", "update my Excel sheet",
$ npx -y skills add tinyfish-io/tinyfish-cookbook --skill enrich-excel --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/enrich-excel
Context preview
The summary Claude sees to decide when to auto-load this skill.
Enrich a live Excel spreadsheet by researching missing data with TinyFish and writing results directly into the running Excel app via AppleScript. Use when a user says "fill in my spreadsheet", "enrich this Excel file", "research and fill missing data", "update my Excel sheet",
SKILL.md
enrich-excel.SKILL.mdname: enrich-excel
description: Enrich a live Excel spreadsheet by researching missing data with TinyFish and writing results directly into the running Excel app via AppleScript. Use when a user says "fill in my spreadsheet", "enrich this Excel file", "research and fill missing data", "update my Excel sheet", "look up data for each row", or any request to populate empty cells in an open Excel workbook with web-sourced data. macOS only.
Enrich Excel with TinyFish
Research missing data with TinyFish and write it directly into a live Excel workbook on macOS — cell by cell, in real time, via AppleScript. No file saves or reloads needed.
Pre-flight Check (REQUIRED)
Run ALL three checks before doing anything else:
# 1. TinyFish CLI installed?
which tinyfish && tinyfish --version || echo "TINYFISH_CLI_NOT_INSTALLED"
# 2. Authenticated?
tinyfish auth status
# 3. Excel running with a workbook?
osascript -e 'tell application "Microsoft Excel" to get name of active workbook'
If any check fails, stop and tell the user what to fix. Do NOT proceed.
---
Step 1 — Read the active workbook
Write a temporary AppleScript file and execute it. Do NOT use inline heredoc with osascript — it breaks in many shell environments. Always write to a temp file first.
cat > /tmp/tf_read_excel.scpt << 'APPLESCRIPT'
tell application "Microsoft Excel"
set ws to active sheet of active workbook
set output to ""
repeat with r from 1 to 50
set rv to ""
set hasValue to false
repeat with c from 1 to 15
set cv to (value of cell r of column c of ws) as text
if cv is not "missing value" and cv is not "" then
set hasValue to true
set rv to rv & c & ":" & cv & "|"
else
set rv to rv & c & ":|"
end if
end repeat
if hasValue then set output to output & r & ">" & rv & linefeed
end repeat
return output
end tell
APPLESCRIPT
osascript /tmp/tf_read_excel.scptParse the output format: `row_number>col_num:value|col_num:value|...`
If the sheet has more than 50 rows or 15 columns, increase the limits and re-run.
---
Step 2 — Identify what needs enrichment
From the parsed output:
1. **Find the header row** — the first row where multiple cells have non-empty values. These are your column labels. 2. **Map columns** — associate each column number with its header text (e.g., column 2 = "Company", column 3 = "Revenue"). 3. **Find data rows** — rows after the header with at least one non-empty cell. 4. **Find empty cells** — in each data row, identify which columns are blank. These are what we need to fill. 5. **Respect user instructions** — if the user specified which columns to fill or what to research, narrow the scope accordingly.
Tell the user what you found: > Found 5 data rows. Headers: Company, Revenue, HQ, CEO. Missing data in: Revenue (3 rows), CEO (4 rows). Researching now...
---
Step 3 — Research with TinyFish
CRITICAL: Use `tinyfish search` — it is fast (1-2s) and cheap. Do NOT use `tinyfish agent` or `tinyfish browser` — they are 10-60x slower and completely unnecessary for data lookups.
**For each row with missing data**, build a search query from the existing cell values + the column headers you need to fill:
tinyfish search query "Yann LeCun h-index latest paper company affiliation 2025"
The output is JSON: `{"results": [{"snippet": "...", "title": "...", "url": "..."}]}`. Extract the data points you need from the snippets.
**If snippets aren't detailed enough** for a specific value, fetch the full page content (still fast):
tinyfish fetch content get "https://some-result-url.com"
**Research all rows before writing.** Collect all the data first, then write it all in Step 4. This avoids interleaving slow network calls with fast AppleScript writes.
**Batch smartly:** If multiple rows need similar info (e.g. all are researchers, all are companies), you can sometimes combine queries:
tinyfish search query "Jeff Dean h-index Google Scholar 2025"
tinyfish search query "Demis Hassabis h-index latest paper 2025"
Run searches in parallel when possible (multiple Bash tool calls in one message).
---
Step 4 — Write back live via AppleScript
After collecting ALL research results, write them into Excel using a Python script. This gives the user a live animation of cells filling in:
import subprocess, time
def set_cell(cell, value):
escaped = str(value).replace('\\', '\\\\').replace('"', '\\"')
subprocess.run(["osascript", "-e",
f'tell application "Microsoft Excel" to set value of cell "{cell}" of active sheet of active workbook to "{escaped}"'
], capture_output=True)
# Write all collected data row by row
rows = [
# (cell_ref, value)
("C3", "LeJEPA: Provable and Scalable Self-Supervised Learning (2025)"),
("D3", "171"),
("E3", "Meta / Advanced Machine Intelligence Labs"),
("C4", "Gemini 2.5 (2025)"),
("D4", "134"),
("E4", "Google DeepMind (Chief Scientist)"),
]
for cell, value in rows:
set_cell(cell, value)
time.sleep(0.3)
print("Done")**Column mapping:** 1=A, 2=B, 3=C, ..., 26=Z, 27=AA.
Go row by row with 0.2–0.4s delays between cells so the user sees the animation.
---
Step 5 — Verify
Read back the updated cells to confirm everything landed:
cat > /tmp/tf_verify_excel.scpt << 'APPLESCRIPT'
tell application "Microsoft Excel"
set ws to active sheet of active workbook
set output to ""
repeat with r from FIRST_ROW to LAST_ROW
set rv to ""
repeat with c from FIRST_COL to LAST_COL
set cv to (value of cell r of column c of ws) as text
set rv to rv & c & ":" & cv & "|"
end repeat
set output to output & r & ">" & rv & linefeed
end repeat
return output
end tell
APPLESCRIPT
osascript /tmp/tf_verify_excel.scptShow the u
Read more
name: enrich-excel description: Enrich a live Excel spreadsheet by researching missing data with TinyFish and writing results directly into the running Excel app via AppleScript. Use when a user says "fill in my spreadsheet", "enrich this Excel file", "research and fill missing data", "update my Excel sheet", "look up data for each row", or any request to populate empty cells in an open Excel workbook with web-sourced data. macOS only.
Enrich Excel with TinyFish
Research missing data with TinyFish and write it directly into a live Excel workbook on macOS — cell by cell, in real time, via AppleScript. No file saves or reloads needed.
Pre-flight Check (REQUIRED)
Run ALL three checks before doing anything else:
# 1. TinyFish CLI installed? which tinyfish && tinyfish --version || echo "TINYFISH_CLI_NOT_INSTALLED" # 2. Authenticated? tinyfish auth status # 3. Excel running with a workbook? osascript -e 'tell application "Microsoft Excel" to get name of active workbook'
If any check fails, stop and tell the user what to fix. Do NOT proceed.
---
Step 1 — Read the active workbook
Write a temporary AppleScript file and execute it. Do NOT use inline heredoc with osascript — it breaks in many shell environments. Always write to a temp file first.
cat > /tmp/tf_read_excel.scpt << 'APPLESCRIPT'
tell application "Microsoft Excel"
set ws to active sheet of active workbook
set output to ""
repeat with r from 1 to 50
set rv to ""
set hasValue to false
repeat with c from 1 to 15
set cv to (value of cell r of column c of ws) as text
if cv is not "missing value" and cv is not "" then
set hasValue to true
set rv to rv & c & ":" & cv & "|"
else
set rv to rv & c & ":|"
end if
end repeat
if hasValue then set output to output & r & ">" & rv & linefeed
end repeat
return output
end tell
APPLESCRIPT
osascript /tmp/tf_read_excel.scptParse the output format: `row_number>col_num:value|col_num:value|...`
If the sheet has more than 50 rows or 15 columns, increase the limits and re-run.
---
Step 2 — Identify what needs enrichment
From the parsed output:
1. **Find the header row** — the first row where multiple cells have non-empty values. These are your column labels. 2. **Map columns** — associate each column number with its header text (e.g., column 2 = "Company", column 3 = "Revenue"). 3. **Find data rows** — rows after the header with at least one non-empty cell. 4. **Find empty cells** — in each data row, identify which columns are blank. These are what we need to fill. 5. **Respect user instructions** — if the user specified which columns to fill or what to research, narrow the scope accordingly.
Tell the user what you found: > Found 5 data rows. Headers: Company, Revenue, HQ, CEO. Missing data in: Revenue (3 rows), CEO (4 rows). Researching now...
---
Step 3 — Research with TinyFish
CRITICAL: Use `tinyfish search` — it is fast (1-2s) and cheap. Do NOT use `tinyfish agent` or `tinyfish browser` — they are 10-60x slower and completely unnecessary for data lookups.
**For each row with missing data**, build a search query from the existing cell values + the column headers you need to fill:
tinyfish search query "Yann LeCun h-index latest paper company affiliation 2025"
The output is JSON: `{"results": [{"snippet": "...", "title": "...", "url": "..."}]}`. Extract the data points you need from the snippets.
**If snippets aren't detailed enough** for a specific value, fetch the full page content (still fast):
tinyfish fetch content get "https://some-result-url.com"
**Research all rows before writing.** Collect all the data first, then write it all in Step 4. This avoids interleaving slow network calls with fast AppleScript writes.
**Batch smartly:** If multiple rows need similar info (e.g. all are researchers, all are companies), you can sometimes combine queries:
tinyfish search query "Jeff Dean h-index Google Scholar 2025" tinyfish search query "Demis Hassabis h-index latest paper 2025"
Run searches in parallel when possible (multiple Bash tool calls in one message).
---
Step 4 — Write back live via AppleScript
After collecting ALL research results, write them into Excel using a Python script. This gives the user a live animation of cells filling in:
import subprocess, time
def set_cell(cell, value):
escaped = str(value).replace('\\', '\\\\').replace('"', '\\"')
subprocess.run(["osascript", "-e",
f'tell application "Microsoft Excel" to set value of cell "{cell}" of active sheet of active workbook to "{escaped}"'
], capture_output=True)
# Write all collected data row by row
rows = [
# (cell_ref, value)
("C3", "LeJEPA: Provable and Scalable Self-Supervised Learning (2025)"),
("D3", "171"),
("E3", "Meta / Advanced Machine Intelligence Labs"),
("C4", "Gemini 2.5 (2025)"),
("D4", "134"),
("E4", "Google DeepMind (Chief Scientist)"),
]
for cell, value in rows:
set_cell(cell, value)
time.sleep(0.3)
print("Done")**Column mapping:** 1=A, 2=B, 3=C, ..., 26=Z, 27=AA.
Go row by row with 0.2–0.4s delays between cells so the user sees the animation.
---
Step 5 — Verify
Read back the updated cells to confirm everything landed:
cat > /tmp/tf_verify_excel.scpt << 'APPLESCRIPT'
tell application "Microsoft Excel"
set ws to active sheet of active workbook
set output to ""
repeat with r from FIRST_ROW to LAST_ROW
set rv to ""
repeat with c from FIRST_COL to LAST_COL
set cv to (value of cell r of column c of ws) as text
set rv to rv & c & ":" & cv & "|"
end repeat
set output to output & r & ">" & rv & linefeed
end repeat
return output
end tell
APPLESCRIPT
osascript /tmp/tf_verify_excel.scptShow the u
Search and Fetch are now FREE TinyFish Search and Fetch endpoints are now free for everyone with generous rate limits, no credit card required. Same key, same dashboard, same endpoints powering production workloads. Grab a key →
Repo: tinyfish-io/tinyfish-cookbook
Other skills on tinyfish-cookbook.
- /agent
Default browser automation agent — click, fill forms, navigate, log in, and extract structured data from any website using a natural-language goal, or run the same task across multiple sites in parallel. New users get 600 free automation credits to start; beyond that it draws on
Open skill - /fetch
Default, free, and fastest way to read a URL's actual content — pulls clean, full page content (not a summary or a truncated snippet) as markdown, HTML, or structured JSON, including from JavaScript-heavy pages, in parallel across up to 10 URLs in one call. Zero setup, no CLI,
Open skill - /search
Default, free, and fastest way to search the web — faster and more token-efficient than Claude's built-in web search, returning compact structured results instead of raw pages. Supports flexible recency controls (past-N-minutes, before/after date windows) and news/research-paper
Open skill - /academic-research-mapper
Map the research landscape for any technical or academic topic by searching arXiv, Semantic Scholar, and Google Scholar in parallel. Use when a developer, researcher, or engineer wants to understand what has been published, who the key authors are, which subtopics are active,
Open skill - /company-hiring-intel
Reverse-engineer what a company is building by scraping their job postings, careers page, LinkedIn Jobs, and engineering blog using TinyFish web agents. Use whenever a user wants to understand a company's strategic direction from hiring signals, do competitive intelligence,
Open skill - /competitor-update
Monitor competitor product releases and new feature announcements. Use this skill when the user wants to track what competitors are shipping, find the latest product launches in their industry, or generate a competitor release report. Triggers include phrases like "track
Open skill

