sheets
Skill1 starsChanged 9 days agoMITView on GitHub
Build, fill, and read LeadMagic Sheets (Sheet Enrichment) over the hosted MCP — add enrichment, AI, formula and JSON columns, run them with credit confirmation, read results, undo, and save recipes. Use when the user mentions a LeadMagic sheet, Sheet Enrichment, enriching rows or columns in a grid, an AI column, or a sheet recipe or template.
2 other projects use a version of this, 1 of them edited.
Adopted by
Most recently taken up by
- LeadMagic/leadmagic-skillsedited, first seen Jul 15, 2026
- seahyc/lark-cowork-plugintheir own version, first seen Apr 1, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 1
- LeadMagic/leadmagic-skills★ 026% same
Wrote their own version · 1
- seahyc/lark-cowork-plugin★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository9 other files it gives its agents.
- account-researchSkill
- bulk-enrichmentSkill
- contact-lookupSkill
- credit-guardSkill
- decision-makersSkill
- get-startedSkill
- hiring-intentSkill
- market-searchSkill
- outbound-recipesSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
14 rules. About 0 are common, 3 are distinctive, and 11 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
11
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 15
Check the user is on a plan with Sheets (billing).
- Distinctive: line 16
Check they picked the workspace that owns the sheet during OAuth.
- Very specific: line 23
Always in this order. Use column keys (col_…) from get_sheet, never display names.
- Very specific: line 25
Find the sheet: Use list_sheets (the user names a sheet) or create_sheet (a new one.
- Very specific: line 26
Read the card first: Call get_sheet before any write.
- Very specific: line 41
Every paid run, including a small sample or an AI run using the user's saved provider key, first returns needs_confirmation, a summary, and …
- Very specific: line 44
Follow
next_step: When a run returns next_step plus next_arguments, that is the next paid stage of the pipeline. - Very specific: line 45
Read results back: Use read_sheet_rows with columns (to save tokens) and filter.
- Very specific: line 82
If the sheet only has a full name, split it with a formula, or with a json column on role_finder's first_name / last_name.
- Very specific: line 85
After an enrichment column runs, list_sheet_column_fields shows its response fields.
- Distinctive: line 113
After an ambiguous or failed paid call, inspect existing runs, saved results, and credits before retrying.
- Very specific: line 149
Composites over chains: put every column in one run_sheet_column call.
- Very specific: line 150
More than 5 rows means a sheet run or bulk job: Never loop single-record tools (find_work_email, enrich_contact, …) row by row.
- Very specific: line 151
Ask only when the server asks: Use the needs_confirmation + confirmation_token flow above.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
LeadMagic Sheets
A LeadMagic sheet is a live grid in the app (Sheet Enrichment in the sidebar). The MCP tools drive the same sheet the user has open: every write shows up in their browser.
Each column is one of two things:
- typed data, or
- something that fills itself per row: a LeadMagic enrichment product, an AI prompt, a formula, or a field pulled out of another column's response.
Sheet tools appear only when the signed-in workspace has Sheets. If they are missing:
- Check the user is on a plan with Sheets (billing).
- Check they picked the workspace that owns the sheet during OAuth.
- Reconnect.
A 403 "Sheets are not enabled" response means the same thing. Never invent data instead.
Operating loop
Always in this order. Use column keys (col_…) from get_sheet, never display names.
- Find the sheet. Use
list_sheets(the user names a sheet) orcreate_sheet(a new one; free, and it returns the column keys). - Read the card first. Call
get_sheetbefore any write. It returns the columns, their keys, what fills each one, and how to write this sheet. - Size the work.
get_sheet_statsanswers "how many rows are missing an email" without paging. Useread_sheet_rowsonly when you need actual values. - Add rows if needed.
add_sheet_rows: up to 100 rows per call, values keyed by column key. It runs nothing and spends nothing.set_sheet_cells: corrections, batched up to 500 edits per call. Never make one call per cell.- For thousands of rows, ask the user to drop the file into Sheet Enrichment instead of streaming rows through chat.
- Build all the columns in one call.
add_sheet_columnsadds and configures several columns at once, left to right. Configuring is free and fills nothing. Run once. Make one
run_sheet_columncall for the whole pipeline:column_keyplusalso_column_keys(up to 10 columns in total)row_state: "notRun"wait_seconds: 45- Columns that read another requested column start after it finishes.
On a big fill, first add
sample_size: 3and follow the approval step below before running the sample. Show the user the sampled values (read_sheet_rowson those rows), then request a new quote and approval for the full run withoutsample_size.- Confirm when the server asks.
- Every paid run, including a small sample or an AI run using the user's saved provider key, first returns
needs_confirmation, a summary, and aconfirmation_token. Nothing has run yet. Only runs the server verifies are free can start immediately. - Show the exact sheet, columns, row scope, and maximum credits from the quote. Only after the user explicitly approves that quote, send the identical arguments plus the token.
- A token, available credits, or approval for another scope is not consent. Never invent a token or reuse one for a changed scope. If the scope changes or the quote expires, obtain a new quote and approval.
- Every paid run, including a small sample or an AI run using the user's saved provider key, first returns
- Follow
next_step. When a run returnsnext_stepplusnext_arguments, that is the next paid stage of the pipeline. Show its summary, and on approval sendnext_argumentswith its token. Don't make separate quote or status calls in between. - Read results back. Use
read_sheet_rowswithcolumns(to save tokens) andfilter.- The filter's root must be a group:
{"type":"group","join":"and","children":[{"type":"cond","columnKey":"col_…","op":"empty"}]} - Wrap a single condition in a group too.
- The filter's root must be a group:
- Explain gaps.
list_sheet_run_rowsshows how each row ended:completed,failed,insufficient_credits, or no result.- Re-run only the failures, with
row_state: "failed". - Re-run filled cells only with
force: trueand the user's explicit consent.
- Re-run only the failures, with
- Save the build.
export_sheet_recipeturns a working sheet into a template.import_sheet_recipebuilds a new sheet from one; it may answer withneeds_confirmationfirst.
Column kinds
| Kind | Fills from | Cost | Set with |
manual | typed by the user or set_sheet_cells | free | add_sheet_column(s) |
enrichment | a LeadMagic product + input_mapping {product input → column key} | the product's per-row credits; misses are usually free | add_sheet_columns / configure_sheet_column |
ai | a per-row prompt naming columns as {Column Name} | LeadMagic AI by default, charged in credits by usage; or the user's own provider key saved in the app | add_sheet_columns / configure_sheet_column |
formula | an expression, e.g. {First Name} & " " & {Last Name} | free | configure_sheet_column |
json | one field of another column's response (source_column_key + path) | free | extract_sheet_json_field |
Enrichment products and inputs
| Product | Inputs (map every one the sheet has a column for) |
email_finder | first_name, last_name, domain, company_name, profile_url |
email_validation | email |
personal_email_finder | profile_url |
profile_search | profile_url |
mobile_finder | profile_url |
role_finder | domain, company_name, job_title |
job_change_detector | profile_url, domain, company_name |
email_to_b2b_profile | email |
b2b_profile_to_email | profile_url |
company_search | domain, company_name |
company_funding | domain, company_name |
technographics | domain |
Notes on enrichment columns:
email_finderwith first name + last name + domain finds far more than a profile URL alone.- If the sheet only has a full name, split it with a formula, or with a
jsoncolumn onrole_finder'sfirst_name/last_name. profile_urlcolumns hold full profile URLs (the path ends inin/{slug}).- Sheets has no job-postings product. Use the
hiring-intentskill for that. - After an enrichment column runs,
list_sheet_column_fieldsshows its response fields. Thenextract_sheet_json_fieldadds columns such ascompany.industryfor free.
AI columns
- Output types (
output_type):text,category(with 2 or morecategories),number,boolean, orjson. - Drafting:
draft_sheet_ai_promptturns a plain-language goal into a prompt and output shape for this sheet. It writes nothing. - Research agents:
web_search: trueandleadmagic_toolsturn the column into a per-row research agent. Bound it withmax_steps,max_credits_per_row, andmax_wall_seconds. - Auto-run:
set_sheet_column_auto_run(workspace admins only) makes an AI column run onrowAddedorinputsChanged. Turning it on needs a confirmation.- Enrichment columns never run by themselves.
- Fill them with
run_sheet_columnafteradd_sheet_rows.
Custom HTTP columns
Custom HTTP (API request) columns are not available through this plugin. Users set them up in the LeadMagic app at app.leadmagic.io. Don't try to build one over MCP.
Run controls
Choosing rows:
scope:column(the default: the whole column),selection(withrow_ids), orsheet.- Narrow further with
filter,q,row_state(notRun,failed,insufficientCredits,noResult), orstart_row/end_row.
Row-id selection cap: 10,000 per call. This applies to row_ids in run_sheet_column, delete_sheet_rows, and restore_sheet_rows.
- On a bigger sheet, don't build a giant selection. Run with
scope: "column"plusrow_stateorfilter. - In the app, select-all only ticks loaded rows. Clear the selection and run the column instead.
Spend and retries:
confirm_max_creditsis the user's ceiling. The run is refused if the quote is higher.- Reuse the same
idempotency_keywhen retrying the same submission. - After an ambiguous or failed paid call, inspect existing runs, saved results, and credits before retrying. Do not automatically replay work whose outcome is unknown.
Waiting: pass wait_seconds: 45 once (to run_sheet_column, get_sheet_run, or list_sheet_runs with active: true) instead of polling.
Stopping:
pause_sheet_runkeeps finished cells and stops charging. To continue later, run the column again withrow_state: "notRun".cancel_sheet_runstops for good. Unstarted rows are not charged.
Imports, workspace runs, and saved lists
These tools take only their own named parameters. Pass ids from the list tool shown.
| Task | Tools and parameters |
| Connected apps | list_cloud_connections (no parameters) |
| CRM import | list_cloud_crm_objects (crm_platform) → list_cloud_crm_fields / list_cloud_crm_filters (crm_platform, object) → import_cloud_crm (crm_platform, object, fields as [{field, label?}], idempotency_key; optional list_view_id, lifecycle_stage, name, max_rows) |
| Outbound import | list_cloud_campaigns (platform, optional search, limit) → import_cloud_sequencer (platform, campaigns, fields, idempotency_key; optional name, max_rows) |
| Import status | list_cloud_imports (sheet_id) → cancel_cloud_import (sheet_id, import_id) |
| Runs and deliveries | list_cloud_runs (sheet_id, optional status, column_key, active_only) → pause_cloud_run / cancel_cloud_run (sheet_id, run_id); list_cloud_pushes (sheet_id) |
| Saved prospect lists | list_prospect_lists (list_type: people or company) → get_prospect_list / export_prospect_list (list_type, list_id); create_prospect_list (list_type, name, optional description, rows); add_prospect_list_members (list_type, list_id, rows); update_prospect_list (list_type, list_id, name and/or description); remove_prospect_list_members (list_type, list_id, member_ids) |
| Saved searches | list_saved_searches (search_type: people or company) → get_saved_search / rerun_saved_search (search_type, search_id) |
- Generate one
idempotency_key(a UUID) per import and resend it unchanged on a retry. - Imports ask for confirmation first. Connect a CRM or outbound platform in the app (Integrations), not over MCP.
Undo
Deletes are soft and restorable:
delete_sheet_rows→restore_sheet_rowsdelete_sheet_column→restore_sheet_column
Both deletes ask for confirmation first.
Spend rules
- Free first:
check_credit_balanceandget_sheet_statsbefore paid runs. Sample before a full run. - Composites over chains: put every column in one
run_sheet_columncall; don't make one call per column. - More than 5 rows means a sheet run or bulk job. Never loop single-record tools (
find_work_email,enrich_contact, …) row by row. - Ask only when the server asks. Use the
needs_confirmation+confirmation_tokenflow above. - 402 /
insufficient_credits: send the user to billing or auto top-up. Then re-run withrow_state: "insufficientCredits". On a 401, reconnect OAuth.
Report only values the sheet returned. Empty or no-result cells stay empty: never fill them from memory. Never put API keys, AI keys, or personal data into prompts, recipes, or chat.
Sheets vs bulk jobs
| Use | When the user wants to |
| Sheets | see and iterate on the list, chain several columns (find → validate → classify), or reuse the build |
bulk-enrichment | run a one-shot file in / file out with no grid |
Both bill the same per-product credits.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

