tinyfish-io/tinyfish-cookbook

enrich-excel

Enrich a live Excel spreadsheet by researching missing data with TinyFish and writing results directly into the running Excel app via AppleScript.

Zobacz źródło
Oryginalny dokument Skill

Treść z repozytorium z zachowaniem nagłówków, przykładów, kodu, tabel, linków i obrazów.

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:

bash
# 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.

bash
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.scpt

Parse 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:

bash
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):

bash
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:

bash
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:

python
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:

bash
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.scpt

Show the user a summary:

Done! Filled 12 cells across 4 rows. All values verified in the live workbook.

Important Rules

  • Always read first — never assume what's in the sheet.
  • Never overwrite — only fill empty cells unless the user explicitly asks to overwrite.
  • Use `tinyfish search`, NOT `tinyfish agent` — search is fast and cheap. Agent is for interactive browser automation and is massive overkill for data lookups. Only escalate to agent if search + fetch genuinely cannot get the data (e.g., behind a login wall).
  • Research first, write second — collect all data before writing to Excel. Don't interleave slow network calls with AppleScript writes.
  • Write AppleScript to temp files — do NOT use inline heredoc osascript << 'EOF'. It breaks. Always write to /tmp/*.scpt and run osascript /tmp/file.scpt.
  • Handle "missing value" — Excel returns the string "missing value" for empty cells in AppleScript. Treat it as empty.
  • Rate limits — if TinyFish rate-limits, wait 60 seconds and retry. If still limited, fall back to your own knowledge and note which values are from training data.
  • Show progress — tell the user what you're researching. Don't go silent.
  • macOS only — AppleScript only works on macOS with Microsoft Excel for Mac.
  • Escape values — always escape " and \ in cell values before passing to osascript.
  • Large sheets — for 100+ rows, process in batches of 10–20 and show progress between batches.
z tego samego repozytorium

Więcej Skills

Wszystkie Skills
tinyfish-io
Społeczność

use-tinyfish

Use TinyFish for web search, fetching URLs, reading pages, current information, source-backed answers, research, docs, pricing/product pages, extraction, scraping, and browser automation. Use whenever the user asks to search, find, look up, research, compare, get information from the web, summarize a URL, fetch page content, or automate a website.

instalacje
2
GitHub Stars
2,2 tys.
Aktualizacja
1 paź
tinyfish-io
Społeczność

dev-pain-finder

Scrape real developer pain points for any keyword, technology, or problem space from Reddit, Hacker News, dev.to, and GitHub Discussions simultaneously — then group complaints by theme, score them by frequency and upvote weight, and return a ranked opportunity map showing where developer frustration is high and solutions are thin. Use this skill whenever someone wants to find developer pain points, validate a product idea, research what developers are frustrated with, asks "what do developers co

instalacje
1
GitHub Stars
2,2 tys.
Aktualizacja
31 sie
tinyfish-io
Społeczność

freelance-gig-finder

Find fresh freelance and contract opportunities across multiple platforms for any skill set. Use this skill when a user asks "find me freelance React jobs", "Upwork gigs for Python developers", "freelance work posted this week", "contract jobs for designers", "find me remote freelance opportunities for [skill]", "I'm looking for freelance work", "what freelance gigs are available for [skill]", or any request to find paid freelance or contract work online.

instalacje
1
GitHub Stars
2,2 tys.
Aktualizacja
31 sie
tinyfish-io
Społeczność

hackathon-finder

Find hackathons tailored to your tech profile and location by searching Devpost, Luma, Partiful, MLH, and Eventbrite. Use this skill when a user asks "find me a hackathon", "are there any hackathons near me", "what hackathons are coming up", "I want to compete in a hackathon", "find hackathons I could win", "upcoming hackathons in [city]", "online hackathons for [skill/tech]", or any request to discover hackathon opportunities.

instalacje
1
GitHub Stars
2,2 tys.
Aktualizacja
31 sie