Reorients the whole sales surface to accounting so it matches the rebuilt demos. Replaces the Shopify and RevOps persona pages with accounts-payable (1099) and accounts-receivable pages, refreshes the bookkeeper page, and rewires the hub + deploy tooling: - landing/bookkeeper/ — refreshed to the validated bank-rec demo (26 -> 20, six phantom duplicates), iframe ?p=bookkeeper. - landing/ap-1099/ — NEW (replaces shopify-pet/): 1099 vendor prep, "24 records -> 8 vendors, 7 missing EINs recovered", iframe ?p=ap-1099, amber accent. - landing/ar-aging/ — NEW (replaces revops/): AR open invoices, "26 -> 21, five double-entered invoices removed", iframe ?p=ar-aging, green accent. - landing/index.html — hub rewritten with the three accounting cards. - deploy.py / deploy.config.example.json / README.md / _shared/styles.css — persona list, sitemap defaults, 404 links, cross-links, docs updated. All demo iframes now point at the renamed app_demo personas; deploy.py builds the dist bundle cleanly (verified) and the Gumroad ?from= tags match. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
392 lines
21 KiB
HTML
392 lines
21 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||
<title>DataTools for 1099 Prep — Clean Your Vendor Master & Recover Missing EINs Locally · $49</title>
|
||
<meta name="description" content="Build a clean 1099 vendor list — locally. Consolidates duplicate vendor rows, backfills scattered EINs, and flags the genuinely missing ones. 24 messy records → 8 complete vendors, 7 EINs recovered. Your data never leaves your computer. $49 one-time." />
|
||
<meta name="keywords" content="1099 vendor list, missing EIN, accounts payable cleanup, vendor master dedupe, 1099-NEC prep, QuickBooks vendor export, deduplicate vendors" />
|
||
<link rel="canonical" href="https://datatools.app/ap-1099/" />
|
||
<link rel="stylesheet" href="../_shared/styles.css" />
|
||
|
||
<!-- Persona accent: Accounts Payable / 1099 → amber/gold invoice tone -->
|
||
<style>
|
||
:root { --accent: #d97706; --accent-ink: #2a1604; }
|
||
</style>
|
||
|
||
<!-- Open Graph -->
|
||
<meta property="og:title" content="DataTools for 1099 Prep — Clean Your Vendor Master & Recover Missing EINs Locally" />
|
||
<meta property="og:description" content="Consolidate duplicate vendors, backfill scattered EINs, file 1099-NECs on time. Local. No upload. $49 one-time." />
|
||
<meta property="og:type" content="product" />
|
||
<meta property="og:url" content="https://datatools.app/ap-1099/" />
|
||
|
||
<!-- Schema.org Product -->
|
||
<script type="application/ld+json">
|
||
{
|
||
"@context": "https://schema.org",
|
||
"@type": "SoftwareApplication",
|
||
"name": "DataTools for 1099 Prep",
|
||
"operatingSystem": "Windows, macOS, Linux",
|
||
"applicationCategory": "BusinessApplication",
|
||
"offers": {
|
||
"@type": "Offer",
|
||
"price": "49",
|
||
"priceCurrency": "USD"
|
||
},
|
||
"description": "Clean your accounts-payable vendor master locally for 1099-NEC season. Six-tool data-cleaning bundle: dedupe-merge to consolidate duplicate vendor rows and backfill missing EINs, text-clean, format-standardize, missing-value handle, column-map, pipeline.",
|
||
"softwareVersion": "1.0"
|
||
}
|
||
</script>
|
||
</head>
|
||
<body>
|
||
|
||
<!-- ============= Sticky buy bar ============= -->
|
||
<div class="buybar">
|
||
<div class="buybar-inner">
|
||
<div class="brand"><span class="brand-mark">●</span> DataTools <span class="muted">/ for 1099 prep</span></div>
|
||
<div>
|
||
<span class="price-tag">$49 — one-time, no subscription</span>
|
||
<a class="btn" href="https://gumroad.com/l/datatools?from=ap-1099" rel="noopener">Get DataTools →</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ============= Hero ============= -->
|
||
<section class="hero">
|
||
<div class="container">
|
||
<div class="eyebrow">For accounts payable · 1099-NEC season · vendor master cleanup</div>
|
||
<h1>Build a clean 1099 vendor list —<br /><strong>with the missing EINs filled in.</strong></h1>
|
||
<p class="lead">
|
||
The same vendor got entered three times across the year — one row has
|
||
the EIN, another the address, another the phone — and now it's January
|
||
and you can't file because the numbers are scattered. DataTools
|
||
consolidates each vendor to one row and backfills the gaps from the
|
||
duplicates: in our sample, <strong>24 messy records become 8 complete
|
||
vendors with 7 missing EINs recovered</strong> from duplicate rows.
|
||
<strong>Your data never leaves your computer.</strong>
|
||
</p>
|
||
<div class="cta-row">
|
||
<a class="btn btn-large" href="https://gumroad.com/l/datatools?from=ap-1099" rel="noopener">Get DataTools for Accounting — $49 →</a>
|
||
<a class="btn btn-ghost btn-large" href="#demo">Try the live demo ↓</a>
|
||
<span class="price-note">One-time payment · cross-platform · runs offline</span>
|
||
</div>
|
||
<div class="stats">
|
||
<div class="stat"><div class="num">24→8</div><div class="label">messy records to complete vendors</div></div>
|
||
<div class="stat"><div class="num">7</div><div class="label">missing EINs recovered</div></div>
|
||
<div class="stat"><div class="num">0</div><div class="label">cloud uploads ever</div></div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============= Pain points ============= -->
|
||
<section>
|
||
<div class="container">
|
||
<div class="eyebrow">If any of these sound like your January</div>
|
||
<h2>Five pains DataTools fixes in one pass</h2>
|
||
<div class="grid">
|
||
<div class="card">
|
||
<span class="icon">🧾</span>
|
||
<h3>The same vendor is in the list two or three times</h3>
|
||
<p>Different staff entered "Acme LLC", "Acme, L.L.C.", and "ACME Llc" across the year. Each is a separate row in the vendor master, and each only holds part of the story — so your 1099 totals split across three near-duplicate spellings.</p>
|
||
<p class="muted"><strong>What it costs:</strong> hours of manual matching, plus the risk of filing the wrong total.</p>
|
||
</div>
|
||
<div class="card">
|
||
<span class="icon">🔢</span>
|
||
<h3>The EIN is on a different row than the rest of the details</h3>
|
||
<p>One record captured the EIN at onboarding; the row you actually paid against doesn't have it. At 1099 time the field is blank even though you collected it months ago — it's just sitting on a duplicate.</p>
|
||
<p class="muted"><strong>What it costs:</strong> chasing W-9s you already have on file.</p>
|
||
</div>
|
||
<div class="card">
|
||
<span class="icon">📵</span>
|
||
<h3>Phones, addresses, and amounts are formatted five different ways</h3>
|
||
<p>Remittance phone as <code>(212) 555-0147</code> on one row and <code>212.555.0147</code> on another. Amounts with stray <code>$</code> and commas. The export won't reconcile and the 1099-NEC box totals don't tie out.</p>
|
||
<p class="muted"><strong>What it costs:</strong> a half-day reconciling before you can even start filing.</p>
|
||
</div>
|
||
<div class="card">
|
||
<span class="icon">⛔</span>
|
||
<h3>You don't know which EINs are genuinely missing</h3>
|
||
<p>Some EINs are recoverable from a duplicate row. Some you never collected. Until the list is consolidated you can't tell the two apart — so you either over-chase vendors or under-file.</p>
|
||
<p class="muted"><strong>What it costs:</strong> late filings and TIN-mismatch penalties.</p>
|
||
</div>
|
||
<div class="card">
|
||
<span class="icon">📤</span>
|
||
<h3>Your QuickBooks vendor export doesn't match your AP ledger</h3>
|
||
<p>The vendor master in QuickBooks, the payments spreadsheet, and the W-9 tracker each use different column names for "vendor name" / "Tax ID" / "amount paid." Merging them is an afternoon of manual rename before any analysis begins.</p>
|
||
<p class="muted"><strong>What it costs:</strong> 4–8 hours per filing season manually merging exports.</p>
|
||
</div>
|
||
<div class="card">
|
||
<span class="icon">🔒</span>
|
||
<h3>Cloud cleaners want you to upload your vendor master</h3>
|
||
<p>Your vendor master holds EINs, remittance addresses, and payment history — exactly the data you should not be uploading to a SaaS to clean. DataTools is desktop-only — your vendor list never leaves your computer.</p>
|
||
<p class="muted"><strong>What it costs:</strong> nothing — and that's the point.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============= Live demo ============= -->
|
||
<section id="demo">
|
||
<div class="container">
|
||
<div class="eyebrow">Live demo · runs in your browser</div>
|
||
<h2>Try it on a real-looking vendor master export</h2>
|
||
<p>
|
||
The demo below loads a sample 24-row vendor file with the pollution
|
||
we've seen in real AP systems: the same vendor entered two or three
|
||
times under slightly different spellings, EINs that live on one
|
||
duplicate row but not the one you paid against, phones and amounts
|
||
formatted five ways, and the usual mess of
|
||
<code>N/A</code> / <code>(blank)</code> / <code>?</code> sentinels.
|
||
Click <strong>Run pipeline</strong> and watch the 24 records collapse
|
||
to <strong>8 complete vendors with 7 EINs recovered</strong> in under
|
||
a second.
|
||
</p>
|
||
<div class="demo-frame">
|
||
<iframe
|
||
src="https://demo.datatools.app/?p=ap-1099"
|
||
loading="lazy"
|
||
title="DataTools live demo — accounts payable / 1099 vendor cleanup"
|
||
sandbox="allow-scripts allow-same-origin allow-downloads allow-forms"></iframe>
|
||
<div class="demo-caption">
|
||
Demo runs on free hosting (Streamlit Community Cloud). Capped at
|
||
100 input rows · output watermarked with one trailing row. The
|
||
paid product has no caps and runs entirely offline.
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============= Built for AP / 1099 ============= -->
|
||
<section>
|
||
<div class="container">
|
||
<div class="eyebrow">Built for the accounts-payable team</div>
|
||
<h2>Five workflows you do every filing season</h2>
|
||
<div class="grid">
|
||
<div class="card">
|
||
<span class="icon">🧹</span>
|
||
<h3>Vendor-master consolidation</h3>
|
||
<p>Catches the same vendor that shows up as <code>Acme LLC</code>, <code>Acme, L.L.C.</code>, and <code>ACME Llc</code>. Fuzzy match merges the spellings; the dedup merge collapses them to one row and backfills the gaps from each duplicate.</p>
|
||
</div>
|
||
<div class="card">
|
||
<span class="icon">🔢</span>
|
||
<h3>EIN backfill & missing-EIN flagging</h3>
|
||
<p>Pulls the EIN off whichever duplicate row captured it and fills it into the survivor. The EINs that are <em>genuinely</em> missing get flagged so you know exactly which W-9s to chase.</p>
|
||
</div>
|
||
<div class="card">
|
||
<span class="icon">💵</span>
|
||
<h3>1099-NEC amount roll-up</h3>
|
||
<p>Before filing: standardize amounts, drop sentinels-as-missing, and merge so each vendor's total paid lands on one row and ties to your AP ledger.</p>
|
||
</div>
|
||
<div class="card">
|
||
<span class="icon">📥</span>
|
||
<h3>QuickBooks vendor export cleanup</h3>
|
||
<p>Whitespace in Tax IDs, near-identical vendor names, copy-paste smart quotes in remittance addresses — gone. Audit log shows every change for your reviewer.</p>
|
||
</div>
|
||
<div class="card">
|
||
<span class="icon">🔗</span>
|
||
<h3>Merging the W-9 tracker into the AP ledger</h3>
|
||
<p>The vendor master, the payments spreadsheet, and the W-9 tracker each name "Tax ID" differently. Map Columns aligns them; the dedup merge consolidates across all three sources.</p>
|
||
</div>
|
||
<div class="card">
|
||
<span class="icon">⚙️</span>
|
||
<h3>Repeatable pipeline</h3>
|
||
<p>Save the cleanup as a JSON file. Drop next year's vendor export on it. Same consolidation, zero re-configuration. Automatable via the CLI.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============= Privacy moat ============= -->
|
||
<section>
|
||
<div class="container">
|
||
<div class="eyebrow">The thing every cloud cleaner can't say</div>
|
||
<h2>Your vendor master never leaves your computer.</h2>
|
||
<p>
|
||
DataTools is a desktop app. There's no upload step, no SaaS account,
|
||
no subscription, no "trust our security policy." The first thing you
|
||
can do after install is open your browser's network tab, run the
|
||
cleaner on your real vendor file, and verify zero outbound
|
||
requests.
|
||
</p>
|
||
<div class="callout">
|
||
<strong>Why it matters for AP:</strong> your vendor master holds EINs,
|
||
remittance addresses, and payment history. Cloud cleaners require you
|
||
to upload it. We don't.
|
||
</div>
|
||
<div class="terminal"><span class="prompt">$</span> python -m src.cli_pipeline vendor_1099.csv --pipeline vendor_1099_pipeline.json --apply
|
||
Reading vendor_1099.csv...
|
||
24 rows, 9 columns
|
||
Executing pipeline:
|
||
<span class="ok">✓</span> text_clean (38 ms) {cells_changed: 41}
|
||
<span class="ok">✓</span> format_standardize (62 ms) {cells_changed: 36} # phones, EINs, amounts
|
||
<span class="ok">✓</span> missing (11 ms) {sentinels_standardized: 9}
|
||
<span class="ok">✓</span> dedup (140 ms) {groups_merged: 8, rows_removed: 16, eins_backfilled: 7}
|
||
|
||
Initial rows: 24 → Final rows: 8 (8 complete vendors)
|
||
EINs recovered from duplicate rows: 7 | Still missing (flagged): 1
|
||
Unparseable cells: 0
|
||
Total elapsed: 0.25 s
|
||
<span class="prompt">$</span> # zero network calls. zero. promise.</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============= Audit moat ============= -->
|
||
<section>
|
||
<div class="container">
|
||
<div class="eyebrow">For when your reviewer asks "what changed?"</div>
|
||
<h2>Every change auditable. Every cell logged.</h2>
|
||
<p>
|
||
Every modification is recorded with the original value, the new
|
||
value, and which rule fired. Hand the audit CSV to your controller,
|
||
your reviewer, or the IRS-ready workpaper file along with the cleaned
|
||
vendor list. No <em>"I trust the AI"</em> hand-waving — they see
|
||
exactly which EIN came from which duplicate row.
|
||
</p>
|
||
<div class="callout">
|
||
<strong>Real example:</strong> the demo above merged 24 records into
|
||
8 vendors and backfilled 7 EINs. The dedup audit lists every vendor
|
||
group with the survivor, its merged-in duplicates, and the source row
|
||
each recovered EIN was pulled from. The standardize audit lists every
|
||
phone, amount, and Tax ID it reformatted.
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============= Format handling ============= -->
|
||
<section>
|
||
<div class="container">
|
||
<div class="eyebrow">If your vendors are messy — most AP files are</div>
|
||
<h2>EINs, phones, addresses, and amounts in every shape.</h2>
|
||
<p>
|
||
One row has the EIN as <code>12-3456789</code>, another as
|
||
<code>123456789</code>. The remittance phone is <code>(212)
|
||
555-0147</code> on one and <code>212.555.0147</code> on the next.
|
||
An amount reads <code>$12,410.75</code> with a stray space. Excel
|
||
treats half of these as text errors. DataTools normalizes every one —
|
||
EINs to a single format, phones to E.164, amounts to clean numerics —
|
||
so the file reconciles and the 1099 box totals tie out.
|
||
</p>
|
||
<ul class="bullets">
|
||
<li><strong>EIN / Tax-ID normalization</strong> to one consistent <code>NN-NNNNNNN</code> shape, with genuinely-missing ones flagged.</li>
|
||
<li><strong>Phone standardization</strong> to E.164 via Google's libphonenumber.</li>
|
||
<li><strong>Amount parsing</strong> for <code>$</code> / commas / stray spaces — including amounts Excel mis-types as text.</li>
|
||
<li><strong>Address shape detection</strong> for US remittance addresses.</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============= What you get ============= -->
|
||
<section>
|
||
<div class="container">
|
||
<div class="eyebrow">In the bundle</div>
|
||
<h2>Six tools. One pipeline. One $49 download.</h2>
|
||
<div class="grid">
|
||
<div class="card"><h3>1 · Find Duplicates</h3><p>Fuzzy match (Jaro-Winkler), 5 normalizers, survivor rules, gap-backfill merge, interactive review.</p></div>
|
||
<div class="card"><h3>2 · Clean Text</h3><p>Whitespace, smart chars, NBSP, BOM, line endings, case ops.</p></div>
|
||
<div class="card"><h3>3 · Standardize Formats</h3><p>EINs, amounts, dates, phones, emails, addresses, names, booleans.</p></div>
|
||
<div class="card"><h3>4 · Fix Missing Values</h3><p>Disguised-null detection, profile, flag genuinely-missing fields, drop strategies.</p></div>
|
||
<div class="card"><h3>5 · Map Columns</h3><p>Fuzzy auto-rename, target schema, type coercion, required-field defaults.</p></div>
|
||
<div class="card"><h3>6 · Automated Workflows</h3><p>Chain tools in recommended order, save/load JSON, automate next year's vendor cleanup.</p></div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============= Pricing ============= -->
|
||
<section>
|
||
<div class="container">
|
||
<div class="eyebrow">Pricing — pay once, own it</div>
|
||
<h2>$49. No subscription. No ceiling on rows or files.</h2>
|
||
<div class="pricing">
|
||
<div class="card featured">
|
||
<div class="row"><div class="price">$49</div><div class="price-suffix">one-time</div></div>
|
||
<h3>DataTools for 1099 Prep</h3>
|
||
<ul>
|
||
<li>All 6 tools, full pipeline</li>
|
||
<li>Mac · Windows · Linux installers</li>
|
||
<li>Code-signed (no Gatekeeper warnings)</li>
|
||
<li>Free updates for the v1.x line</li>
|
||
<li>Bonus: ready-made vendor-master & 1099 pipelines</li>
|
||
</ul>
|
||
<a class="btn btn-large" href="https://gumroad.com/l/datatools?from=ap-1099" rel="noopener">Buy on Gumroad →</a>
|
||
</div>
|
||
<div class="card">
|
||
<div class="row"><div class="price">$149</div><div class="price-suffix">one-time</div></div>
|
||
<h3>Full DataTools Suite</h3>
|
||
<p class="muted">Available when 3+ bundles ship. Includes everything in the 1099-prep pack plus the Bookkeeper and Accounts-Receivable bundles. Save $48.</p>
|
||
<a class="btn btn-ghost btn-large" href="#" aria-disabled="true">Coming when ready</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============= FAQ ============= -->
|
||
<section>
|
||
<div class="container">
|
||
<h2>Questions</h2>
|
||
|
||
<details class="faq">
|
||
<summary>Does this work with my QuickBooks vendor export?</summary>
|
||
<p>Yes — the input is just CSV / Excel from any source. Your QuickBooks vendor export works the same as a Xero export, a Bill.com download, or a vendor spreadsheet you maintain by hand. The cleaner doesn't care where the file came from.</p>
|
||
</details>
|
||
|
||
<details class="faq">
|
||
<summary>How does this compare to Excel's "Remove Duplicates"?</summary>
|
||
<p>Excel does <em>exact</em> deduplication and only deletes — it never backfills. <code>Acme LLC</code> and <code>Acme, L.L.C.</code> are different vendors to Excel, and even when it does catch a duplicate it throws the extra row away, taking the EIN with it. DataTools fuzzy-matches across spelling drift, merges the group to one survivor, and pulls the missing EIN, phone, and address off the rows it merges in.</p>
|
||
</details>
|
||
|
||
<details class="faq">
|
||
<summary>How does it recover a missing EIN?</summary>
|
||
<p>When it merges a group of duplicate vendor rows, it keeps the survivor and backfills any empty field — including the EIN — from whichever duplicate row had it. In the sample file, 7 of the 8 vendors had their EIN recovered this way; the 1 that's truly missing gets flagged so you know to chase the W-9.</p>
|
||
</details>
|
||
|
||
<details class="faq">
|
||
<summary>Do I need to know Python to use it?</summary>
|
||
<p>No. The GUI is a browser interface that opens automatically when you double-click the app. It loads your vendor file, you click Run, you download the cleaned list. The CLI is there for power users who want to script next year's cleanup.</p>
|
||
</details>
|
||
|
||
<details class="faq">
|
||
<summary>What about my data privacy?</summary>
|
||
<p>Your vendor master — EINs, remittance addresses, payment history — never leaves your computer. There is no cloud component, no telemetry, no "anonymous usage stats." When the app is running you can confirm zero outbound network requests in your browser's developer tools.</p>
|
||
</details>
|
||
|
||
<details class="faq">
|
||
<summary>What's your refund policy?</summary>
|
||
<p>Try the live demo above on the sample vendor dataset before you buy. If you still find DataTools doesn't fit your workflow within 14 days, email for a refund — no questions asked.</p>
|
||
</details>
|
||
|
||
<details class="faq">
|
||
<summary>Will there be updates?</summary>
|
||
<p>Yes. The v1.x line is included free for everyone who buys DataTools today. We ship a patch every 30 days adding format support, edge-case fixes, and small features.</p>
|
||
</details>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============= Final CTA ============= -->
|
||
<section>
|
||
<div class="container" style="text-align: center;">
|
||
<h2>Stop chasing scattered EINs by hand.</h2>
|
||
<p class="lead" style="margin: 0 auto 28px;">One $49 download. Mac, Windows, or Linux. Runs offline. Consolidates 24 messy records into 8 complete vendors, recovers the 7 EINs hiding on duplicate rows, flags the ones genuinely missing, and saves a pipeline you can re-run on next year's vendor export.</p>
|
||
<a class="btn btn-large" href="https://gumroad.com/l/datatools?from=ap-1099" rel="noopener">Get DataTools for Accounting — $49 →</a>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============= Footer ============= -->
|
||
<footer>
|
||
<div class="container">
|
||
<div>
|
||
<p><strong>DataTools</strong> — local data-cleaning for accounts payable, bookkeepers, and accounts-receivable teams.</p>
|
||
<p class="muted">© 2026 · Built solo · Shipped from a small office.</p>
|
||
</div>
|
||
<div>
|
||
<p>
|
||
<a href="../bookkeeper/">For bookkeepers</a> ·
|
||
<a href="../ar-aging/">For accounts receivable</a><br />
|
||
<a href="https://gumroad.com/l/datatools?from=ap-1099">Buy on Gumroad</a> ·
|
||
<a href="mailto:hello@datatools.app">Email support</a>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
|
||
</body>
|
||
</html>
|