Prep your 1099-NEC and 1099-MISC list for the tax year. I total year-to-date payments per vendor from your run history, flag eligible vendors (non-corporate, ≥ $600), split NEC from MISC, cross-reference W-9 status against the W-9s you have on file, and draft chase emails for missing W-9s as Gmail / Outlook drafts (or as plain `.md` files if no inbox is connected). I prep, you file via IRS FIRE, Track1099, or Tax1099. I never file and I never send.
Scanned 9/19/2026
Install to Claude Code
npx -y skills add gethouston/houston --skill prep-my-1099s --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Prep My 1099s?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/gethouston-prep-my-1099s)More formats (shields.io, HTML) on the badges page.
---
name: prep-my-1099s
description: "Prep your 1099-NEC and 1099-MISC list for the tax year. I total year-to-date payments per vendor from your run history, flag eligible vendors (non-corporate, ≥ $600), split NEC from MISC, cross-reference W-9 status against the W-9s you have on file, and draft chase emails for missing W-9s as Gmail / Outlook drafts (or as plain `.md` files if no inbox is connected). I prep, you file via IRS FIRE, Track1099, or Tax1099. I never file and I never send."
version: 1
category: Bookkeeping
featured: no
image: ledger
integrations: [gmail, outlook]
x_houston:
created_by: houston
skill_schema: 1
---
# Prep My 1099s
1099-NEC and 1099-MISC prep for the tax year. I total payments per vendor from your run transactions, flag who's eligible, split NEC from MISC, cross-reference W-9 status, and draft chase emails for the missing W-9s. The chase emails sit in your Gmail or Outlook drafts (never sent) so you can review and click send. I prep — you file with the IRS.
## When to use
- "who are our 1099 vendors" / "prep the 1099 list for {year}".
- "draft chase emails for missing W-9s".
- Called by `hand-off-to-my-tax-preparer` as part of year-end package.
- Called in January for prior tax year (IRS deadline: Jan 31 for NEC).
## Connections I need
I run external work through Composio. Before this skill runs I check that the categories below are linked. Missing → I name the category, ask you to connect it from the Integrations tab, stop.
- **Gmail or Outlook** (inbox) — optional, lets me create draft chase emails directly to vendors with missing W-9s. I never send. If not connected I write the email text to a draft file you can copy.
This skill works fully offline against your run history. No connection blocks the run; the inbox connection just makes chase emails easier.
## Information I need
I read your bookkeeping context first. For every required field that's missing I ask ONE plain-language question (best modality: connected app > file drop > URL > paste) and wait.
- **The tax year** — Required. Why: defines the date range for year-to-date payment aggregation. If missing I ask: "Which tax year are we prepping the 1099 list for? In January I default to the year that just ended."
- **Your company's legal name and EIN** — Required. Why: drops into the 1099 payer block on every form. If missing I ask: "What's the company's legal name and EIN as registered with the IRS?"
- **A current run history covering the tax year** — Required. Why: I aggregate vendor payments from your processed runs. If missing I ask: "Have we processed statements for the tax year yet? If not, drop the bank and credit card statements so I can categorize them first."
- **W-9s on file for your contractors** — Optional. Why: lets me mark each 1099 vendor as "have-w9" and skip the chase email. If you don't have them in one place I ask: "Do you have W-9s collected anywhere? If not, I'll flag every eligible vendor as missing and draft chase emails for each."
- **A vendor email list** — Optional. Why: lets me address chase emails to each vendor directly. If you don't have it I leave the recipient blank in each draft and ask you to fill it in.
## Steps
<!-- houston-workflow:v1 -->
1. **Read context.** Load `context/bookkeeping-context.md`, `config/context-ledger.json`, `config/chart-of-accounts.json`. Required ledger: `universal.company` (legal name + EIN for 1099 payer block), `domains.tax` (preparer name / email for cover note).
2. **Determine tax year.** User specified year → use it. Called in January no year → default to prior calendar year (`today.year - 1`) - that 1099 cycle. Called mid-year → use current year as running draft.
3. **Aggregate year-to-date payments per vendor.** Read every `runs/*/run.json` whose period overlaps tax year. Filter transactions to `amount < 0` (money out), group by `party` (canonical name). Sum absolute amounts per party within tax year date range. Cite every transaction by `(run period, date, amount)` - no invented payments.
4. **Exclude payments not 1099-reportable.**
- Transfers (`gl_code == "9000"` / `source == "transfer"`).
- Payments to corporations (S-corp / C-corp exempt except specific categories like attorney fees). Default-assume corporate if canonical party ends in `Inc`, `Corp`, `LLC` (W-9 confirms), `Corporation`, `Ltd`. Flag for user confirm - default exclude.
- Payroll payments (go on W-2, not 1099).
- Credit-card payments to vendor. Vendor paid exclusively via credit card → card issuer issues 1099-K - exclude from list. Flag any vendor paid only via credit card.
- Reimbursements labeled pass-through.
5. **Apply 1099 eligibility thresholds.**
- **1099-NEC** - contractors / services (account categories: professional services, contract labor, consulting, engineering contractors). Threshold: ≥ $600 year-to-date.
- **1099-MISC** - rent, attorney fees (even if incorporated), prizes, medical payments, other. Threshold: ≥ $600 year-to-date.
- Flag vendors straddling categories (e.g., law firm paid for both services and settlement) - user decides split.
6. **Cross-reference W-9 status.** Check `files/` (or user-provided vendor-W9 folder) for PDF matching each eligible vendor canonical name (fuzzy match, token-set-ratio ≥ 0.85). Record W-9 status per vendor: `have-w9` / `missing-w9` / `pending`. Vendor list with W-9 indicators provided at runtime → merge in.
7. **Draft chase emails for missing W-9s.** For every vendor flagged `missing-w9`:
- Write `drafts/1099-chase-{vendor-slug}.md` - subject line, body, signature. Body references tax year, $ threshold, Form W-9 link (`https://www.irs.gov/pub/irs-pdf/fw9.pdf`), asks for return by specified date (default: Jan 15 for prior-year filing).
- `composio search inbox` returns connected Gmail / Outlook slug → create inbox draft (never send) using vendor email if known from prior correspondence; include draft URL / id in `.md`. No connection → skip inbox step silently.
- Cite canonical party, year-to-date paid, source run periods in draft body so user can verify before sending.
8. **Write `compliance/1099s/{year}.md`.** Atomic write. Structure:
- **Payer block** - legal name, EIN, state.
- **Summary** - NEC count, NEC $ total, MISC count, MISC $ total, missing-W-9 count.
- **NEC recipients** - table: canonical party, year-to-date paid, account category breakdown, W-9 status, address (from W-9 if present; else `TBD`).
- **MISC recipients** - same table shape.
- **Excluded** - corporate exclusions, credit-card-only, payroll, transfers - one-line reason per row (so user can audit exclusions).
- **Straddle cases** - vendors where NEC/MISC split needs judgment call, with options.
- **Filing note** - "Prep only. File via IRS FIRE, Track1099, or Tax1099. Deadline: Jan 31 (NEC to recipient + IRS), Feb 28 paper / Mar 31 electronic (MISC to IRS)."
9. **Append to `outputs.json`.** Row: `{type: "vendor-1099-list", title: "1099 list {year}", summary, path: "compliance/1099s/{year}.md", status: "draft", domain: "compliance"}`. Read-merge-write.
10. **Summarize to user.** One paragraph: NEC count + $, MISC count + $, missing-W-9 count with chase-email paths, any straddle cases needing call, filing reminder ("I preplied - you file via FIRE / Track1099 / Tax1099"). Never file. Never send.
## Outputs
- `compliance/1099s/{year}.md` (indexed in `outputs.json` as `vendor-1099-list`)
- `drafts/1099-chase-{vendor-slug}.md` (one per missing W-9 - not indexed; drafts)
- Optional inbox drafts in Gmail / Outlook via Composio (never sent)Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!