Sweep follow-up to 93e43fc. Display labels now consistent across docs,
landing pages, CLI output, code comments, docstrings, and test prose.
Five parallel surfaces touched:
- docs (EN + ES): README, USER-GUIDE, CLI-REFERENCE, and 11 internal
design/planning docs
- landing pages: index + bookkeeper/revops/shopify-pet
- src: CLI module docstrings, _TOOL_DISPLAY dicts in cli_analyze.py
and gui/components/_legacy.py, core module headers, every tool
page's module docstring
- tests: class/method/module docstrings and section-header comments
- test-cases READMEs
Page slugs (1_Deduplicator etc.), tool_id strings (01_deduplicator
etc.), Python class names (TestDeduplicatorWorkflow, FeatureFlag.*),
URL paths, anchor IDs, CSS classes, and asset filenames were left
intact since they're code identifiers / structural references.
All 2033 tests pass.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
237 lines
9.0 KiB
HTML
237 lines
9.0 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||
<title>DataTools — Local CSV / Excel Cleaning for Shopify, Bookkeepers, and RevOps</title>
|
||
<meta name="description" content="One desktop tool. Three workflows. Clean Shopify customer exports, reconcile messy bank statements, or dedupe lead lists across HubSpot and LinkedIn — all locally. $49 one-time." />
|
||
<link rel="canonical" href="https://datatools.app/" />
|
||
<link rel="stylesheet" href="_shared/styles.css" />
|
||
|
||
<meta property="og:title" content="DataTools — Local CSV / Excel Cleaning" />
|
||
<meta property="og:description" content="One desktop tool, three niche workflows. Runs entirely offline. $49 one-time." />
|
||
<meta property="og:type" content="website" />
|
||
<meta property="og:url" content="https://datatools.app/" />
|
||
|
||
<style>
|
||
/* Apex-page–only tweaks: persona cards are slightly bigger and use
|
||
per-card accent borders so the visitor visually identifies which
|
||
card matches their work in <2 seconds. */
|
||
.persona-grid {
|
||
display: grid; gap: 24px;
|
||
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
||
margin-top: 28px;
|
||
}
|
||
.persona-card {
|
||
background: var(--surface);
|
||
border: 1px solid var(--rule);
|
||
border-radius: var(--radius);
|
||
padding: 28px;
|
||
display: flex; flex-direction: column;
|
||
transition: transform 0.08s ease, border-color 0.15s ease, box-shadow 0.2s ease;
|
||
text-decoration: none;
|
||
color: inherit;
|
||
}
|
||
.persona-card:hover {
|
||
transform: translateY(-2px);
|
||
border-color: var(--card-accent, var(--accent));
|
||
box-shadow: var(--shadow);
|
||
text-decoration: none;
|
||
}
|
||
.persona-card.shopify { --card-accent: #6ee7b7; }
|
||
.persona-card.bookkeeper{ --card-accent: #7dd3fc; }
|
||
.persona-card.revops { --card-accent: #c4b5fd; }
|
||
.persona-card .pill {
|
||
display: inline-block;
|
||
background: rgba(255,255,255,0.04);
|
||
color: var(--card-accent, var(--accent));
|
||
border: 1px solid var(--card-accent, var(--accent));
|
||
padding: 4px 10px; border-radius: 999px;
|
||
font-size: 12px; font-weight: 600;
|
||
letter-spacing: 0.04em;
|
||
margin-bottom: 12px;
|
||
align-self: flex-start;
|
||
}
|
||
.persona-card h3 {
|
||
color: var(--text);
|
||
font-size: 22px;
|
||
margin-bottom: 12px;
|
||
}
|
||
.persona-card p {
|
||
color: var(--text-soft);
|
||
flex: 1;
|
||
margin-bottom: 16px;
|
||
}
|
||
.persona-card .pain {
|
||
font-size: 14px; color: var(--text-mute);
|
||
margin: 8px 0 18px;
|
||
}
|
||
.persona-card .pain li { margin-bottom: 4px; }
|
||
.persona-card .open {
|
||
color: var(--card-accent, var(--accent));
|
||
font-weight: 600;
|
||
font-size: 15px;
|
||
}
|
||
.persona-card .open::after {
|
||
content: " →";
|
||
transition: margin-left 0.15s ease;
|
||
}
|
||
.persona-card:hover .open::after { margin-left: 4px; }
|
||
</style>
|
||
</head>
|
||
<body>
|
||
|
||
<!-- Sticky brand bar (no buy CTA on the apex — visitor hasn't picked a niche yet) -->
|
||
<div class="buybar">
|
||
<div class="buybar-inner">
|
||
<div class="brand"><span class="brand-mark">●</span> DataTools</div>
|
||
<div>
|
||
<span class="price-tag">Pick your workflow ↓</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<section class="hero">
|
||
<div class="container">
|
||
<div class="eyebrow">For Shopify operators · bookkeepers · marketing & RevOps agencies</div>
|
||
<h1>Local CSV / Excel cleaning.<br /><strong>One tool. Three workflows.</strong></h1>
|
||
<p class="lead">
|
||
DataTools is a desktop app that fixes the data-cleaning headaches
|
||
every small business hits — duplicates Excel can't catch,
|
||
international phones it can't parse, dates and currencies in three
|
||
different formats per export. One $49 download. Works on Mac,
|
||
Windows, and Linux. <strong>Your data never leaves your
|
||
computer.</strong>
|
||
</p>
|
||
|
||
<div class="persona-grid">
|
||
<a class="persona-card shopify" href="shopify-pet/">
|
||
<span class="pill">🛍️ Shopify operator</span>
|
||
<h3>Customer / vendor / subscriber export cleanup</h3>
|
||
<p>
|
||
Klaviyo-import-ready customer lists in 30 seconds. Catches
|
||
cross-device duplicates, standardizes international phones
|
||
and addresses, fixes the disguised nulls that break product
|
||
feeds.
|
||
</p>
|
||
<ul class="pain">
|
||
<li>· Fix Klaviyo per-contact billing on phantom dupes</li>
|
||
<li>· Repair feeds rejected by Google Merchant / Meta</li>
|
||
<li>· Unify orders from Shopify + Etsy + Amazon + Faire</li>
|
||
<li>· Resolve VAT-MOSS country-name drift</li>
|
||
</ul>
|
||
<span class="open">Open the Shopify demo & pricing</span>
|
||
</a>
|
||
|
||
<a class="persona-card bookkeeper" href="bookkeeper/">
|
||
<span class="pill">📒 Bookkeeper / accountant</span>
|
||
<h3>Bank-export reconciliation with audit trail</h3>
|
||
<p>
|
||
Catches the duplicate transaction QuickBooks imported twice
|
||
when Jan and Feb exports overlap. Standardizes dates,
|
||
amounts, and vendor casing. Hands you a row-level audit log
|
||
to share with the client.
|
||
</p>
|
||
<ul class="pain">
|
||
<li>· Catch month-overlap re-import dupes</li>
|
||
<li>· Consolidate vendors for clean 1099 reports</li>
|
||
<li>· Produce hand-off-ready audit trail</li>
|
||
<li>· Multi-currency books (EUR / GBP / BRL)</li>
|
||
</ul>
|
||
<span class="open">Open the bookkeeper demo & pricing</span>
|
||
</a>
|
||
|
||
<a class="persona-card revops" href="revops/">
|
||
<span class="pill">🪢 Marketing / RevOps</span>
|
||
<h3>Lead-list dedup across HubSpot, LinkedIn, scrapes</h3>
|
||
<p>
|
||
One canonical lead per real person — across HubSpot,
|
||
LinkedIn, Apollo, ZoomInfo, and manual scrapes.
|
||
International phones (50+ country codes), per-row country
|
||
column, fuzzy match with merge.
|
||
</p>
|
||
<ul class="pain">
|
||
<li>· Stop paying HubSpot tier price for cross-source dupes</li>
|
||
<li>· Protect sender reputation from invalid emails</li>
|
||
<li>· Skip the 4–8 wk GDPR review on cloud cleaners</li>
|
||
<li>· Suppression-list sync across 5+ platforms</li>
|
||
</ul>
|
||
<span class="open">Open the RevOps demo & pricing</span>
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section>
|
||
<div class="container">
|
||
<div class="eyebrow">What's the same across all three</div>
|
||
<h2>One engine. Same six tools. Same $49.</h2>
|
||
<p>
|
||
The persona pages above are positioning, not different products.
|
||
Whichever you buy, you get the full bundle: Find Duplicates, Clean
|
||
Text, Standardize Formats, Fix Missing Values, Map Columns,
|
||
and Automated Workflows — pre-tuned with a saved pipeline
|
||
that matches your workflow.
|
||
</p>
|
||
<div class="grid">
|
||
<div class="card">
|
||
<span class="icon">🔒</span>
|
||
<h3>Local-first</h3>
|
||
<p>Desktop app. No cloud upload, no SaaS account, no subscription. Verify zero outbound calls in your browser's network tab.</p>
|
||
</div>
|
||
<div class="card">
|
||
<span class="icon">📋</span>
|
||
<h3>Auditable</h3>
|
||
<p>Every cell change is logged with the original value, the new value, and which rule fired. Hand the audit CSV to your client.</p>
|
||
</div>
|
||
<div class="card">
|
||
<span class="icon">🌍</span>
|
||
<h3>International</h3>
|
||
<p>50+ country codes, per-row country awareness, EU comma decimals, parens-negative amounts, locale-aware month names.</p>
|
||
</div>
|
||
<div class="card">
|
||
<span class="icon">⚙️</span>
|
||
<h3>Repeatable</h3>
|
||
<p>Save your cleanup as a JSON pipeline. Re-run on next week's export with one CLI command. Same cleanup, zero re-config.</p>
|
||
</div>
|
||
<div class="card">
|
||
<span class="icon">📦</span>
|
||
<h3>Cross-platform</h3>
|
||
<p>Mac · Windows · Linux installers. Code-signed for macOS Gatekeeper. Free updates for the v1.x line.</p>
|
||
</div>
|
||
<div class="card">
|
||
<span class="icon">💰</span>
|
||
<h3>$49 one-time</h3>
|
||
<p>No subscription. No per-client license. No row caps. No AI black-box.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section>
|
||
<div class="container" style="text-align: center;">
|
||
<h2>Pick your workflow above to try the live demo.</h2>
|
||
<p class="muted">Or read the docs first — every tool has a CLI, every pipeline is JSON, every change is audited.</p>
|
||
</div>
|
||
</section>
|
||
|
||
<footer>
|
||
<div class="container">
|
||
<div>
|
||
<p><strong>DataTools</strong> — local data-cleaning for Shopify, bookkeepers, and RevOps teams.</p>
|
||
<p class="muted">© 2026 · Built solo · Shipped from a small office.</p>
|
||
</div>
|
||
<div>
|
||
<p>
|
||
<a href="shopify-pet/">For Shopify operators</a> ·
|
||
<a href="bookkeeper/">For bookkeepers</a> ·
|
||
<a href="revops/">For RevOps agencies</a><br />
|
||
<a href="mailto:hello@datatools.app">Email support</a>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
|
||
</body>
|
||
</html>
|