From e7ec79b9b53e07be21a97e43591e7935280490ca Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 22 Jun 2026 18:59:50 +0000 Subject: [PATCH] demo: retarget landing pages to the accounting audience MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- landing/README.md | 18 +- landing/_shared/styles.css | 4 +- landing/ap-1099/index.html | 391 +++++++++++++++++++++++++++++ landing/ar-aging/index.html | 358 ++++++++++++++++++++++++++ landing/bookkeeper/index.html | 71 +++--- landing/deploy.config.example.json | 2 +- landing/deploy.py | 18 +- landing/index.html | 113 +++++---- landing/revops/index.html | 352 -------------------------- landing/shopify-pet/index.html | 381 ---------------------------- 10 files changed, 867 insertions(+), 841 deletions(-) create mode 100644 landing/ap-1099/index.html create mode 100644 landing/ar-aging/index.html delete mode 100644 landing/revops/index.html delete mode 100644 landing/shopify-pet/index.html diff --git a/landing/README.md b/landing/README.md index 6c3ae09..bfcd26e 100644 --- a/landing/README.md +++ b/landing/README.md @@ -9,9 +9,9 @@ Cloudflare Pages. ``` landing/ ├── _shared/styles.css shared CSS (system fonts, no externals) -├── shopify-pet/index.html Shopify operator (priority: pet supplies) -├── bookkeeper/index.html bookkeeper / freelance accountant -├── revops/index.html marketing / RevOps agency +├── bookkeeper/index.html bookkeeper — bank reconciliation +├── ap-1099/index.html accounts payable — 1099 vendor prep +├── ar-aging/index.html accounts receivable — open invoices └── README.md this file ``` @@ -19,8 +19,8 @@ Each page: - Inherits `landing/_shared/styles.css` - Overrides the `--accent` colour variable in an inline ` + + + + + + + + + + + + + +
+
+
DataTools / for 1099 prep
+
+ $49 — one-time, no subscription + Get DataTools → +
+
+
+ + +
+
+
For accounts payable · 1099-NEC season · vendor master cleanup
+

Build a clean 1099 vendor list —
with the missing EINs filled in.

+

+ 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, 24 messy records become 8 complete + vendors with 7 missing EINs recovered from duplicate rows. + Your data never leaves your computer. +

+
+ Get DataTools for Accounting — $49 → + Try the live demo ↓ + One-time payment · cross-platform · runs offline +
+
+
24→8
messy records to complete vendors
+
7
missing EINs recovered
+
0
cloud uploads ever
+
+
+
+ + +
+
+
If any of these sound like your January
+

Five pains DataTools fixes in one pass

+
+
+ 🧾 +

The same vendor is in the list two or three times

+

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.

+

What it costs: hours of manual matching, plus the risk of filing the wrong total.

+
+
+ 🔢 +

The EIN is on a different row than the rest of the details

+

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.

+

What it costs: chasing W-9s you already have on file.

+
+
+ 📵 +

Phones, addresses, and amounts are formatted five different ways

+

Remittance phone as (212) 555-0147 on one row and 212.555.0147 on another. Amounts with stray $ and commas. The export won't reconcile and the 1099-NEC box totals don't tie out.

+

What it costs: a half-day reconciling before you can even start filing.

+
+
+ +

You don't know which EINs are genuinely missing

+

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.

+

What it costs: late filings and TIN-mismatch penalties.

+
+
+ 📤 +

Your QuickBooks vendor export doesn't match your AP ledger

+

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.

+

What it costs: 4–8 hours per filing season manually merging exports.

+
+
+ 🔒 +

Cloud cleaners want you to upload your vendor master

+

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.

+

What it costs: nothing — and that's the point.

+
+
+
+
+ + +
+
+
Live demo · runs in your browser
+

Try it on a real-looking vendor master export

+

+ 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 + N/A / (blank) / ? sentinels. + Click Run pipeline and watch the 24 records collapse + to 8 complete vendors with 7 EINs recovered in under + a second. +

+
+ +
+ 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. +
+
+
+
+ + +
+
+
Built for the accounts-payable team
+

Five workflows you do every filing season

+
+
+ 🧹 +

Vendor-master consolidation

+

Catches the same vendor that shows up as Acme LLC, Acme, L.L.C., and ACME Llc. Fuzzy match merges the spellings; the dedup merge collapses them to one row and backfills the gaps from each duplicate.

+
+
+ 🔢 +

EIN backfill & missing-EIN flagging

+

Pulls the EIN off whichever duplicate row captured it and fills it into the survivor. The EINs that are genuinely missing get flagged so you know exactly which W-9s to chase.

+
+
+ 💵 +

1099-NEC amount roll-up

+

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.

+
+
+ 📥 +

QuickBooks vendor export cleanup

+

Whitespace in Tax IDs, near-identical vendor names, copy-paste smart quotes in remittance addresses — gone. Audit log shows every change for your reviewer.

+
+
+ 🔗 +

Merging the W-9 tracker into the AP ledger

+

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.

+
+
+ ⚙️ +

Repeatable pipeline

+

Save the cleanup as a JSON file. Drop next year's vendor export on it. Same consolidation, zero re-configuration. Automatable via the CLI.

+
+
+
+
+ + +
+
+
The thing every cloud cleaner can't say
+

Your vendor master never leaves your computer.

+

+ 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. +

+
+ Why it matters for AP: your vendor master holds EINs, + remittance addresses, and payment history. Cloud cleaners require you + to upload it. We don't. +
+
$ python -m src.cli_pipeline vendor_1099.csv --pipeline vendor_1099_pipeline.json --apply +Reading vendor_1099.csv... + 24 rows, 9 columns +Executing pipeline: + text_clean (38 ms) {cells_changed: 41} + format_standardize (62 ms) {cells_changed: 36} # phones, EINs, amounts + missing (11 ms) {sentinels_standardized: 9} + 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 +$ # zero network calls. zero. promise.
+
+
+ + +
+
+
For when your reviewer asks "what changed?"
+

Every change auditable. Every cell logged.

+

+ 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 "I trust the AI" hand-waving — they see + exactly which EIN came from which duplicate row. +

+
+ Real example: 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. +
+
+
+ + +
+
+
If your vendors are messy — most AP files are
+

EINs, phones, addresses, and amounts in every shape.

+

+ One row has the EIN as 12-3456789, another as + 123456789. The remittance phone is (212) + 555-0147 on one and 212.555.0147 on the next. + An amount reads $12,410.75 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. +

+
    +
  • EIN / Tax-ID normalization to one consistent NN-NNNNNNN shape, with genuinely-missing ones flagged.
  • +
  • Phone standardization to E.164 via Google's libphonenumber.
  • +
  • Amount parsing for $ / commas / stray spaces — including amounts Excel mis-types as text.
  • +
  • Address shape detection for US remittance addresses.
  • +
+
+
+ + +
+
+
In the bundle
+

Six tools. One pipeline. One $49 download.

+
+

1 · Find Duplicates

Fuzzy match (Jaro-Winkler), 5 normalizers, survivor rules, gap-backfill merge, interactive review.

+

2 · Clean Text

Whitespace, smart chars, NBSP, BOM, line endings, case ops.

+

3 · Standardize Formats

EINs, amounts, dates, phones, emails, addresses, names, booleans.

+

4 · Fix Missing Values

Disguised-null detection, profile, flag genuinely-missing fields, drop strategies.

+

5 · Map Columns

Fuzzy auto-rename, target schema, type coercion, required-field defaults.

+

6 · Automated Workflows

Chain tools in recommended order, save/load JSON, automate next year's vendor cleanup.

+
+
+
+ + +
+
+
Pricing — pay once, own it
+

$49. No subscription. No ceiling on rows or files.

+
+ +
+
$149
one-time
+

Full DataTools Suite

+

Available when 3+ bundles ship. Includes everything in the 1099-prep pack plus the Bookkeeper and Accounts-Receivable bundles. Save $48.

+ Coming when ready +
+
+
+
+ + +
+
+

Questions

+ +
+ Does this work with my QuickBooks vendor export? +

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.

+
+ +
+ How does this compare to Excel's "Remove Duplicates"? +

Excel does exact deduplication and only deletes — it never backfills. Acme LLC and Acme, L.L.C. 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.

+
+ +
+ How does it recover a missing EIN? +

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.

+
+ +
+ Do I need to know Python to use it? +

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.

+
+ +
+ What about my data privacy? +

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.

+
+ +
+ What's your refund policy? +

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.

+
+ +
+ Will there be updates? +

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.

+
+
+
+ + +
+
+

Stop chasing scattered EINs by hand.

+

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.

+ Get DataTools for Accounting — $49 → +
+
+ + + + + + diff --git a/landing/ar-aging/index.html b/landing/ar-aging/index.html new file mode 100644 index 0000000..89df1d3 --- /dev/null +++ b/landing/ar-aging/index.html @@ -0,0 +1,358 @@ + + + + + + DataTools for Accounts Receivable — Kill Duplicate Invoices Inflating Your AR Aging Report · $49 + + + + + + + + + + + + + + + + + +
+
+
DataTools / for Accounts Receivable
+
+ $49 — one-time, no subscription + Get DataTools → +
+
+
+ +
+
+
For accounts receivable · controllers · collections · accounting teams
+

Stop chasing the invoices
your aging report counted twice.

+

+ The same invoice number gets posted twice — once as + 3/04/2026 for $1,250.00, again as + 2026-03-04 for 1250 — so your AR aging + report double-counts the receivable and your team chases a balance + that was never really open. DataTools standardizes every invoice + date, due date, and amount, lowercases client emails, then removes + the double-entered invoice numbers — taking a real open-invoices + export from 26 rows to 21, five duplicate invoices + removed — all on your own machine, with nothing uploaded. +

+
+ Get DataTools for Accounting — $49 → + Try the live demo ↓ + One-time payment · cross-platform · runs offline +
+
+
26→21
rows after dedupe
+
5
duplicate invoices removed
+
0
cloud uploads ever
+
+
+
+ + +
+
+
If your last aging report didn't tie out to cash
+

Five pains DataTools fixes before you run the aging report

+
+
+ 💸 +

Double-entered invoices inflate every aging bucket

+

The same invoice number posted twice — once in MM/DD/YYYY, once in ISO — lands in two rows and gets counted twice. Your 60-day bucket looks worse than it is, and the receivables total overstates what's actually owed.

+

What it costs: overstated AR, a balance sheet that won't reconcile, and a controller asking why.

+
+
+ 📞 +

Collections chases invoices that were already paid or never real

+

When a duplicate invoice number shows as still-open, a collector emails the client about a balance that doesn't exist. The client pushes back, trust erodes, and your team burns a morning untangling it.

+

What it costs: wasted collections hours + an awkward "please disregard" to the client.

+
+
+ ⚖️ +

Uploading the AR ledger to a cloud cleaner is a compliance headache

+

Every cloud-based cleaner wants you to upload your full receivables ledger — client names, amounts, contact emails. That's a data-handling review your firm doesn't want to run. DataTools is desktop-only — no upload, no DPA, no review.

+

What it costs: weeks of review per tool, or just not cleaning the data at all.

+
+
+ 🗓️ +

Mixed date formats make due dates and aging unreliable

+

Invoice dates arrive as 3/4/26, 2026-03-04, and Mar 4 2026; due dates are just as mixed. Sort by date and the buckets are wrong, so the wrong invoices show up in the wrong aging column.

+

What it costs: 1–3 hours per close reconciling dates by hand, every period.

+
+
+ 📧 +

Messy client contacts break your remittance reminders

+

Client names come in mixed casing and emails arrive as Billing@ClientCo.com in one row and billing@clientco.com in another — so the same client looks like two, and reminders go out twice or not at all.

+

What it costs: duplicate dunning, missed reminders, and a client list that won't group.

+
+
+ +

Blank invoice statuses hide whether a receivable is really open

+

When one of the two twin rows has a blank status, you can't tell if the invoice is open, partial, or paid — so it either gets dropped from the aging report or counted at the wrong stage.

+

What it costs: misclassified receivables and an aging report you can't trust.

+
+
+
+
+ +
+
+
Live demo · runs in your browser
+

Try it on a real-looking open-invoices export

+

+ The demo below loads a 26-row open-invoices export with five + double-entered invoice numbers — the same invoice posted twice in + different date and amount formats (3/04/2026 vs + 2026-03-04, $1,250.00 vs 1250), + client emails in mixed case, and one blank invoice status. Click + Run pipeline and watch the 5-step pipeline (text + clean → format → missing → column map → dedup) standardize both date + columns to ISO, coerce amounts to numbers, lowercase the emails, and + collapse 26 rows to 21 — backfilling the blank status from its twin + row so the aging report is accurate. +

+
+ +
+ Demo runs on free hosting. Capped at 100 input rows · output + watermarked. The paid product has no caps and runs entirely offline. +
+
+
+
+ +
+
+
Built for the receivables close
+

Three workflows you do every period

+
+
+ 🪢 +

Dedupe double-entered invoices

+

Match on invoice number, drop the second posting, and keep one canonical row per invoice — backfilling a blank status, due date, or amount from its twin so nothing accurate is lost when the duplicate goes.

+
+
+ 🗓️ +

Standardize invoice and due dates

+

Coerce every invoice date and due date to ISO and every amount to a clean number, so the aging buckets sort correctly and the receivables total ties out to the ledger.

+
+
+ 📧 +

Normalize client contacts for remittance

+

Lowercase client emails and fix name casing so each client groups as one. Send remit-to reminders once, to a clean contact list — not twice because two rows looked like two clients.

+
+
+
+
+ +
+
+
If your export comes from QuickBooks, Xero, or a billing system
+

Standardized dates and amounts. One row per invoice.

+

+ Your billing system exports 3/04/2026. The re-post of + the same invoice has 2026-03-04. The amount is + $1,250.00 in one row and 1250 in the other. + DataTools reads each row, normalizes both date columns to ISO, + coerces the amount to a number, and then matches on invoice number + to keep exactly one canonical row per receivable. +

+
    +
  • Invoice date + due date both standardized to ISO, so every aging bucket sorts and totals correctly.
  • +
  • Amounts coerced to numbers: $1,250.00 and 1250 resolve to the same value — no false mismatch between twin rows.
  • +
  • Client emails lowercased so the same client groups as one for remittance reminders.
  • +
  • Status backfill on dedupe: when a twin row has a blank invoice status, the survivor inherits it — so no open receivable goes missing from the report.
  • +
+
+
+ +
+
+
For anyone who reports on receivables
+

Every duplicate invoice you don't catch overstates your AR.

+

+ Your aging report is only as good as the export under it. Every + double-entered invoice number is a receivable counted twice — it + inflates the aging buckets, overstates the total owed, and sends + collections after balances that aren't really open. DataTools + catches them once, before the report runs, by matching on invoice + number with the date and amount noise already standardized away. +

+
+ Real numbers from the demo: a 26-row open-invoices + export collapses to 21 — that's five double-entered invoices the + mixed date and amount formats were hiding, both date columns now + ISO, amounts numeric, emails lowercased, 0 unparseable, and a blank + status backfilled from its twin row. The aging report finally ties out. +
+
+
+ +
+
+
The thing every cloud cleaner can't say
+

Your clients' receivables never leave your computer.

+

+ Cloud cleaning tools require you to upload your AR ledger — client + names, invoice amounts, remit-to contacts. That ledger is sensitive + client financial data, and once it's on someone else's server, your + firm owns a data-handling problem you didn't need. DataTools is a + desktop app. There is no upload step. +

+
$ python -m src.cli_pipeline ar_open_invoices.csv --pipeline ar_open_invoices_pipeline.json --apply +Reading ar_open_invoices.csv... + 26 rows, 9 columns +Executing pipeline: + text_clean (40 ms) {cells_changed: 31} + format_standardize (120 ms) {dates_to_iso: 41, amounts_to_number: 26, emails_lowercased: 18} + missing (30 ms) {sentinels_standardized: 4, status_backfilled: 1} + column_map (20 ms) {columns_renamed: 2} + dedup (60 ms) {duplicate_invoices_removed: 5, merged: 5} + +Initial rows: 26 → Final rows: 21 +Unparseable dates/amounts: 0 +Total elapsed: 0.3 s +$ # 5 double-entered invoices gone. aging report ties out. for $49.
+
+
+ +
+
+
In the bundle
+

Six tools. One pipeline. One $49 download.

+
+

1 · Find Duplicates

Match on invoice number; keep one canonical row per receivable and backfill blanks from the twin.

+

2 · Clean Text

Smart quotes from copy-paste, NBSP from spreadsheet exports, BOM from Excel.

+

3 · Standardize Formats

Invoice and due dates to ISO, amounts to clean numbers, client emails lowercased.

+

4 · Fix Missing Values

Detect TBD, (unknown), and backfill blank invoice statuses on dedupe.

+

5 · Map Columns

Project to your aging-report schema, coerce amount to a number, reorder fields for import.

+

6 · Automated Workflows

Save the cleanup as JSON. Drop next period's open-invoices export on it. Same dedupe, automated.

+
+
+
+ +
+
+
Pricing — pay once, own it
+

$49. No subscription. No per-close fee.

+
+ +
+
$149
one-time
+

Full DataTools Suite

+

Available when 3+ bundles ship. Includes everything in the Accounts Receivable pack plus the Bookkeeper and Accounts Payable / 1099 bundles. Save $48.

+ Coming when ready +
+
+
+
+ +
+
+

Questions

+ +
+ Does this replace my accounting system's deduplication? +

No — it cleans the export before you run the aging report or import it back. Most billing systems will happily hold two postings of the same invoice number; DataTools catches the double-entered invoice so it never inflates a single aging bucket.

+
+ +
+ How does it know two rows are the same invoice? +

It matches on invoice number after the date and amount formats are standardized away. So a posting dated 3/04/2026 for $1,250.00 and its twin dated 2026-03-04 for 1250 are recognized as one invoice — and only one canonical row survives.

+
+ +
+ What happens to a blank invoice status when the duplicate is removed? +

It's backfilled. If one twin row has a blank status and the other says open, the surviving row inherits open — so no real receivable drops off the aging report just because the duplicate carried the better data.

+
+ +
+ Can I use it on multiple clients without paying again? +

Yes. The licence is per-operator, not per-client. Run it on every client's open-invoices export for the same $49.

+
+ +
+ What's the audit trail look like? +

A row-by-row CSV: every modified cell with its original value, new value, and which rule fired — every date coerced to ISO, every amount normalized, every duplicate invoice removed. A separate JSON file describes the pipeline that produced it, so the cleanup reproduces deterministically and your client can verify it on their machine.

+
+ +
+ What's your refund policy? +

Try the live demo above on the sample open-invoices export before you buy. If DataTools doesn't fit your workflow within 14 days, email for a refund — no questions asked.

+
+
+
+ +
+
+

Stop counting the same receivable twice.

+

One $49 download. Standardizes invoice dates, due dates, and amounts, lowercases client emails, removes the double-entered invoices your aging report was counting twice, and saves a pipeline you can re-run on next period's open-invoices export.

+ Get DataTools for Accounting — $49 → +
+
+ + + + + diff --git a/landing/bookkeeper/index.html b/landing/bookkeeper/index.html index 8e9551a..e1d7a61 100644 --- a/landing/bookkeeper/index.html +++ b/landing/bookkeeper/index.html @@ -3,9 +3,9 @@ - DataTools for Bookkeepers — Reconcile Bank Exports With An Audit Trail · $49 - - + DataTools for Bookkeepers — Catch Bank Transactions Posted Twice · $49 + + @@ -18,8 +18,8 @@ - - + + @@ -35,7 +35,7 @@ "price": "49", "priceCurrency": "USD" }, - "description": "Reconcile bank exports, dedupe vendor lists, and produce a hand-off-ready audit trail. Six-tool data-cleaning bundle for bookkeepers and freelance accountants.", + "description": "Catch the duplicate transactions your bank export posted twice across overlapping months, standardize dates and amounts, and produce a hand-off-ready audit trail. Six-tool data-cleaning bundle for bookkeepers and freelance accountants.", "softwareVersion": "1.0" } @@ -47,7 +47,7 @@
DataTools / for Bookkeepers
$49 — one-time, no subscription - Get DataTools → + Get DataTools for Bookkeepers — $49 →
@@ -55,24 +55,29 @@
For bookkeepers · freelance accountants · small-firm partners
-

Reconcile messy bank exports.
Hand your client an audit trail.

+

Catch the transactions your bank export
posted twice.

- The Jan and Feb exports overlap and you've got the same transaction - booked twice. Vendor names are "Amazon", "amazon.com", - and "AMAZON.COM*4F2X9" in three different rows. Dates are a - smoosh of 01/15/2025, 2025-01-15, and - Jan 18 2025. DataTools fixes all of it in one pass — - and produces a row-by-row CSV showing every change so your client - can verify your work. + The Jan and Feb exports overlap, so the same payment posts + twice in two different shapes — 01/15/2025  +$3,450.00 + in one export and 2025-01-15  3450.00 in the + other — and a plain Excel dedupe never catches it because the dates and + amounts don't match character-for-character. DataTools standardizes + every date to ISO and every amount to numeric (parens-negatives + resolved), then dedups on the real transaction so the + reconciliation ties out. On the sample export that's + 26 rows → 20 — six phantom duplicate transactions + removed, 36 date/amount cells standardized, 0 unparseable — and you + get a row-by-row CSV showing every change so your client can verify + your work.

- Get DataTools — $49 → + Get DataTools for Bookkeepers — $49 → Try the live demo ↓ One-time payment · cross-platform · runs offline
-
6
tools, one bundle
-
100 %
auditable changes
+
26→20
rows, on the sample export
+
6
phantom duplicates removed
0
cloud uploads ever
@@ -129,13 +134,15 @@
Live demo · runs in your browser

Try it on a sample bank export with a known overlap

- The demo below loads a 25-row export combining January and February + The demo below loads a 26-row export combining January and February activity, with the month-boundary rows duplicated across exports — the exact scenario where QuickBooks (or any reconciler) silently double-counts transactions. Click Run pipeline and - watch the dedup catch every overlap, dates land in ISO format, and - the parens-negative amounts (($89.50)) become proper - negative numbers. + watch it standardize 36 date/amount cells, land every date in ISO + format, turn the parens-negative amounts (($89.50)) into + proper negatives, flag the disguised-null categories, and dedup the + export down to 20 real transactions — six phantom + duplicates removed, 0 unparseable.

-
- Demo runs on free hosting. Capped at 100 input rows · output - watermarked. The paid product has no caps and runs entirely offline. -
-
- -
- -
-
-
Built for the agency RevOps day
-

Three workflows you do every campaign

-
-
- 🪢 -

Email-list dedup across lead sources

-

HubSpot exports + LinkedIn Sales Navigator + the VA's spreadsheet, all merged. Fuzzy match across email + phone + name catches the cross-source duplicates that broke your last campaign send.

-
-
- 🌍 -

Multi-platform audience reconciliation

-

Build one canonical audience from Meta, Google Ads, LinkedIn, and your CRM. Each platform exports a different shape; Map Columns aligns them all, dedup merges the survivors with their most-complete fields.

-
-
- 🛡️ -

Suppression-list management

-

Suppression lists need to dedupe across email + phone + first-party identifiers. Add a row, dedupe, ship the canonical CSV to every platform — without uploading the suppression list to any of them.

-
-
-
-
- -
-
-
If your campaigns target outside the US — almost everyone's do
-

50+ country codes. Per-row country awareness.

-

- Your HubSpot list has (415) 555-1234. Your scraped - list from the same prospect has +1 415 555 1234. Your - Italian prospect entered +39 06 6982. Your Brazilian - lead has 11 3071 0000. Each comes from a row tagged - with its country — DataTools reads that column per row and parses - every phone correctly to E.164. -

-
    -
  • Per-row country column drives the parser — no global default that bucks UK numbers as malformed US.
  • -
  • Country-name normalization: USA / US / United States all resolve to the same ISO-2 code.
  • -
  • 50+ country support via Google's libphonenumber, including KR, CN, IN, MX, BR, IL, TR, PL, DK, SE.
  • -
  • Schema enforcement via Map Columns: project to your CRM's required shape, coerce score columns to integers, reorder fields to match the import contract.
  • -
-
-
- -
-
-
For platforms that charge per contact
-

Every duplicate you don't catch costs you for the life of the contract.

-

- HubSpot prices on contacts. Klaviyo prices on contacts. Marketo, - Iterable, ActiveCampaign — all priced on contacts. Every duplicate - you don't catch is a recurring tax on your campaign. DataTools - catches them once, before import, with a fuzzy matcher that's - tuned to the cross-source noise you actually see. -

-
- Real numbers from the demo: 25 input rows from - three sources collapse to 19 — that's 6 duplicates the cross-source - noise was hiding. On a 50,000-row campaign list, that ratio - typically saves 12,000+ contacts a month, every month. -
-
-
- -
-
-
The thing every cloud cleaner can't say
-

Your prospects' contact info never leaves your computer.

-

- Cloud lead-cleaning tools require you to upload your audience. - That audience is your single most valuable agency asset — and once - it's on someone else's server, your client's privacy story is - no longer in your hands. DataTools is a desktop app. There is no - upload step. -

-
$ python -m src.cli_pipeline campaign_q1.csv --pipeline revops_pipeline.json --apply -Reading campaign_q1.csv... - 53,802 rows, 14 columns -Executing pipeline: - text_clean (160 ms) {cells_changed: 8,205} - format_standardize (1.4 s) {cells_changed: 41,889 — 50 country codes} - missing (140 ms) {sentinels_standardized: 6,710} - column_map (220 ms) {columns_renamed: 4, columns_added: 1} - dedup (4.8 s) {duplicates_removed: 12,344, merged: 12,344} - -Initial rows: 53,802 → Final rows: 41,458 -Total elapsed: 6.7 s -$ # 12,344 fewer contacts to pay for. for $49.
-
-
- -
-
-
In the bundle
-

Six tools. One pipeline. One $49 download.

-
-

1 · Find Duplicates

Fuzzy match across email + phone + name + company; merge survivors with most-complete fields.

-

2 · Clean Text

Smart quotes from copy-paste, NBSP from spreadsheet exports, BOM from Excel.

-

3 · Standardize Formats

E.164 phones with per-row country, canonical emails, name casing, ISO dates.

-

4 · Fix Missing Values

Detect TBD, (unknown), across vendor exports.

-

5 · Map Columns

Project to your CRM's required schema, coerce score to integer, reorder for import.

-

6 · Automated Workflows

Save the cleanup as JSON. Drop next campaign's combined export on it. Same dedup, automated.

-
-
-
- -
-
-
Pricing — pay once, own it
-

$49. No subscription. No per-campaign fee.

-
- -
-
$149
one-time
-

Full DataTools Suite

-

Available when 3+ bundles ship. Includes everything in the RevOps pack plus the Shopify and Bookkeeper bundles. Save $48.

- Coming when ready -
-
-
-
- -
-
-

Questions

- -
- Does this replace HubSpot's deduplication? -

No — it cleans data before import to HubSpot (or LinkedIn, Marketo, Klaviyo, etc.). HubSpot's dedup runs on already-imported contacts; DataTools catches duplicates that haven't yet cost you a contract slot.

-
- -
- Does it handle international phones correctly? -

Yes — via Google's libphonenumber, with 50+ country codes. The killer feature is per-row country: point a column at it (any column with values like US, USA, United States, +1, JP, Japan) and DataTools parses each row in its own region. No more UK numbers bucketed as malformed US.

-
- -
- Can I use it on multiple clients without paying again? -

Yes. The licence is per-operator, not per-client. Run it on every agency client's lead list for the same $49.

-
- -
- How does fuzzy match work across columns? -

Out of the box, the dedup engine builds default strategies based on column names — typically email + phone with exact match, name with Jaro-Winkler at 85%. You can override via JSON: pick which columns to match on, which algorithm, and what threshold. Strategies survive in the saved pipeline so next campaign uses the same rules.

-
- -
- What's the audit trail look like? -

A row-by-row CSV: every modified cell with its original value, new value, and which rule fired. A separate JSON file describes the pipeline that produced it. Together they reproduce the cleanup deterministically — your client can verify it on their machine.

-
- -
- What's your refund policy? -

Try the live demo above on the sample dataset before you buy. If DataTools doesn't fit your workflow within 14 days, email for a refund — no questions asked.

-
-
-
- -
-
-

Stop paying twice for the same contact.

-

One $49 download. Catches the cross-source duplicates HubSpot and LinkedIn can't see, normalizes phones for 50+ countries, and saves a pipeline you can re-run on next campaign's combined list.

- Get DataTools — $49 → -
-
- - - - - diff --git a/landing/shopify-pet/index.html b/landing/shopify-pet/index.html deleted file mode 100644 index 424075f..0000000 --- a/landing/shopify-pet/index.html +++ /dev/null @@ -1,381 +0,0 @@ - - - - - - DataTools for Shopify — Clean Customer & Product Exports Locally · $49 - - - - - - - - - - - - - - - - - - - -
-
-
DataTools / for Shopify
-
- $49 — one-time, no subscription - Get DataTools → -
-
-
- - -
-
-
For Shopify operators · pet supplies · subscription stores · DTC
-

Klaviyo-import-ready customer lists.
In 30 seconds. Locally.

-

- Your Shopify customer export is a mess of formatting drift, disguised - duplicates, and inconsistent phone numbers. DataTools fixes all of it - in one pass — fuzzy-dedupes the same customer Klaviyo would charge - you for twice, standardises phones across your international - subscribers, and hands you a cleaned CSV. Your data never - leaves your computer. -

-
- Get DataTools — $49 → - Try the live demo ↓ - One-time payment · cross-platform · runs offline -
-
-
6
tools, one bundle
-
1 GB
customer file in 2.5 min
-
0
cloud uploads ever
-
-
-
- - -
-
-
If any of these sound like your Tuesday
-

Five pains DataTools fixes in one pass

-
-
- 💸 -

Klaviyo / Mailchimp / Omnisend bills you for every duplicate

-

Same customer signs up twice — once with a typo, once with a plus-tag, once on mobile. Your subscriber list has 10–18 % duplicate rate and you're paying for every one of them, every month, forever.

-

What it costs: $30–$300/mo per percent of dupes on a 50 k-list — recurring.

-
-
- 📵 -

Your product feed got rejected by Google Merchant Center

-

Smart quotes from a copy-paste in product titles. NBSP in SKU. Inconsistent attribute casing. Feed bounces, the launch sits for 24–72 hours while you try to find the bad row in a 12,000-line CSV.

-

What it costs: 1–3 days of delayed campaign × the campaign value.

-
-
- 🪢 -

Orders from Shopify + Etsy + Amazon + Faire don't speak the same language

-

Each platform's export uses different column names for "customer email" / "ship country" / "order total." Merging takes hours of manual rename and copy-paste before the analysis can even begin.

-

What it costs: 4–8 hours per month manually merging exports.

-
-
- 🔁 -

Subscription churn looks higher than it is

-

Pet-box subscribers cancel, then re-sub three months later under a different email or device. Your cohort report says churn is 20 % when it's actually 12 % — and you're over-paying for acquisition because LTV is mis-calculated.

-

What it costs: wrong CAC ceiling for the next year of paid ads.

-
-
- 🌍 -

VAT MOSS / EU tax breaks because country is spelled three ways

-

Your UK customers are tagged UK, U.K., and United Kingdom — all in one export. The VAT report aggregates them as three different markets. Compliance friction every quarter.

-

What it costs: compliance risk + repeated manual normalization.

-
-
- 🔒 -

Cloud cleaners want you to upload your customer list

-

Your customer list is your single most valuable business asset. Uploading it to a SaaS to clean it is the privacy story you do not want. DataTools is desktop-only — your list never leaves your computer.

-

What it costs: nothing — and that's the point.

-
-
-
-
- - -
-
-
Live demo · runs in your browser
-

Try it on a real-looking Shopify customer export

-

- The demo below loads a sample 15-row Shopify customer file with - pollution we've seen in actual stores: smart quotes from copy-paste, - duplicates with email-case drift, international phones from the UK, - Spain, Germany, Australia, and Japan, and the usual mess of - N/A / (blank) / ? sentinels. - Click Run pipeline and watch every column get - cleaned in under a second. -

-
- -
- 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. -
-
-
-
- - -
-
-
Built for the Shopify operator
-

Five workflows you do every week

-
-
- 🧹 -

Customer-list cleanup

-

Catches the same customer who shows up as john@gmail.com, John@Gmail.com, and j.ohn@gmail.com. Fuzzy match merges the spellings, exact match catches the obvious ones.

-
-
- 📦 -

Product catalogue dedup

-

SKU whitespace, near-identical product names, copy-paste smart quotes in titles — gone. Audit log shows every change.

-
-
- 🛒 -

Abandoned-cart hygiene

-

Before re-engagement: dedupe across email + phone, drop sentinels-as-missing, format dates so your sequence triggers fire correctly.

-
-
- 📥 -

Subscriber-list import to Klaviyo

-

Klaviyo charges per contact. Every duplicate you don't catch costs you for the life of the subscription. Catch them once, pay once.

-
-
- 🔗 -

Multi-channel order consolidation

-

Orders from Shopify + Etsy + a wholesale spreadsheet, each with a different column for "customer email." Map Columns aligns them; dedup merges across channels.

-
-
- ⚙️ -

Repeatable pipeline

-

Save the cleanup as a JSON file. Drop next week's export on it. Same cleanup, zero re-configuration. Automatable via the CLI.

-
-
-
-
- - -
-
-
The thing every cloud cleaner can't say
-

Your customer list never leaves your computer.

-

- 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 customer file, and verify zero outbound - requests. -

-
- Why it matters for Shopify: your customer list is - your single most valuable business asset. Cloud cleaners require - you to upload it. We don't. -
-
$ python -m src.cli_pipeline customers.csv --apply -Reading customers.csv... - 47,832 rows, 14 columns -Executing pipeline: - text_clean (140 ms) {cells_changed: 12,408} - format_standardize (810 ms) {cells_changed: 31,202} - missing (95 ms) {sentinels_standardized: 8,129} - dedup (3.1 s) {duplicates_removed: 2,347} - -Initial rows: 47,832 → Final rows: 45,485 -Total elapsed: 4.2 s -$ # zero network calls. zero. promise.
-
-
- - -
-
-
For when your client asks "what changed?"
-

Every change auditable. Every cell logged.

-

- Every modification is recorded with the original value, the new - value, and which rule fired. Hand the audit CSV to your accountant, - your marketing manager, or your boss along with the cleaned file. - No "I trust the AI" hand-waving — they see exactly what - happened. -

-
- Real example: the demo above standardized 27 - cells across 15 customers. The audit log lists each one — row, - column, before, after, which standardizer fired. The dedup audit - lists every duplicate group with the survivor and its losers. -
-
-
- - -
-
-
If you sell internationally — most pet brands do
-

Phones, addresses, and currencies from anywhere on Earth.

-

- Your subscriber from London entered her phone as 020 7946 - 0958. Your Tokyo customer entered 03-3210-7000. - Your German wholesale buyer wrote €2.410,75. Excel - thinks all of them are mistakes. DataTools knows what country each - row is from (per-row country column) and parses every one correctly - to E.164 phones, ISO dates, and numeric amounts. -

-
    -
  • 50+ country codes via Google's libphonenumber.
  • -
  • Currency auto-detect for $ / £ / € / ¥ / R$ / kr / zł — including the EU comma-decimal that breaks Excel.
  • -
  • Address shape detection for US, UK, Canada, Germany, Australia.
  • -
  • Locale-aware month names in English, French, German.
  • -
-
-
- - -
-
-
In the bundle
-

Six tools. One pipeline. One $49 download.

-
-

1 · Find Duplicates

Fuzzy match (Jaro-Winkler), 5 normalizers, survivor rules, interactive review.

-

2 · Clean Text

Whitespace, smart chars, NBSP, BOM, line endings, case ops.

-

3 · Standardize Formats

Dates, phones, emails, addresses, names, currencies, booleans.

-

4 · Fix Missing Values

Disguised-null detection, profile, mean/median/mode/ffill, drop strategies.

-

5 · Map Columns

Fuzzy auto-rename, target schema, type coercion, required-field defaults.

-

6 · Automated Workflows

Chain tools in recommended order, save/load JSON, automate weekly cleanups.

-
-
-
- - -
-
-
Pricing — pay once, own it
-

$49. No subscription. No ceiling on rows or files.

-
- -
-
$149
one-time
-

Full DataTools Suite

-

Available when 3+ bundles ship. Includes everything in the Shopify pack plus the Bookkeeper and RevOps bundles. Save $48.

- Coming when ready -
-
-
-
- - -
-
-

Questions

- -
- Does this work with Shopify Plus? -

Yes — the input is just CSV / Excel from any source. Your Shopify Plus exports work the same as the standard plan, the same as a Shopify-to-CSV pipeline you've stitched together yourself. The cleaner doesn't care.

-
- -
- How does this compare to Excel's "Remove Duplicates"? -

Excel does exact deduplication. John@Gmail.com and john@gmail.com are different customers to Excel. DataTools fuzzy-matches across case, whitespace, formatting, and even close-but-not-identical strings. The demo above merges 4 customer pairs Excel would leave duplicated.

-
- -
- How big a file can it handle? -

1 GB CSV with international phones + addresses processes in about 2.5 minutes on a typical workstation. Streaming mode keeps memory bounded regardless of input size — we tested it on 26 million rows.

-
- -
- Do I need to know Python to use it? -

No. The GUI is a browser interface that opens automatically when you double-click the app. It loads your file, you click Run, you download the cleaned file. The CLI is there for power users who want to script weekly cleanups.

-
- -
- What about my privacy? -

Your customer list 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.

-
- -
- What's your refund policy? -

Try the live demo above on the sample dataset before you buy. If you still find DataTools doesn't fit your workflow within 14 days, email for a refund — no questions asked.

-
- -
- Will there be updates? -

Yes. The v1.x line is included free for everyone who buys DataTools today. We ship a patch every 30 days adding country support, edge-case fixes, and small features.

-
-
-
- - -
-
-

Stop deduplicating customers by hand.

-

One $49 download. Mac, Windows, or Linux. Runs offline. Catches the duplicates Excel misses, standardizes the phones from your international customers, and saves a pipeline you can re-run on next week's export.

- Get DataTools — $49 → -
-
- - - - - -