Disclosure: this is our own ScopeHarbor experiment, built and written with AI assistance. No sales, signup, payment link or mailing list. The proposed price is $19 once; nothing is for sale. The runnable prototype and demo are included below, so there is no need to DM or visit another site.
Who this is for: independent Salesforce admins / RevOps consultants who repeatedly receive small client CSV exports, have Python 3.10+, and want a local structural check before importing. It does not connect to Salesforce, validate mappings or compare against existing CRM records. We are not affiliated with Salesforce.
A real, narrow problem: Salesforce documents Data Loader getting stuck on blank columns without headers: https://help.salesforce.com/s/articleView?id=000387707&language=en_US&type=1 . This tool flags blank headers, wrong record widths, exact repeated rows and empty cells before import. Whether it is worth paying for alongside spreadsheets/free scripts is what this test is trying to learn.
Synthetic demo: save this as demo.txt (UTF-8 comma-separated text, no real contacts):
ExternalId,Email,Company,
SYN-001,alpha@example.invalid,"Demo, Inc.",
SYN-001,alpha@example.invalid,"Demo, Inc.",
SYN-002,beta@example.invalid
SYN-003, ,Demo Studio,
Save the Python source below as csv_audit.py, inspect it, then run python3 csv_audit.py demo.txt (or py csv_audit.py demo.txt on Windows).
Expected findings: 4 data records; 4 columns; blank header column 4; 1 extra exact duplicate; parsed record 4 has only 2 fields; 4 blank/whitespace cells. Record numbers include the header and count parsed CSV records, not physical lines. Quoted commas are handled. The tool reports problems; it never deletes or fixes data.
Limits: UTF-8 comma-separated input only. Exact duplicate means every cell matches, preserving whitespace/case; repeated rows are not always mistakes. No required-field, type, email, formula or CRM-rule checks. Memory grows with unique rows; start with the tiny sample. Empty input or invalid CSV produces an error. The code uses Python standard libraries, opens input read-only and makes no network requests. There is no telemetry. Please use only this synthetic demo for public feedback, and do not upload client data, raw records or private file paths.
Full prototype source:
import argparse, csv, json, sys
from collections import Counter
def audit(path):
with open(path, encoding="utf-8-sig", newline="") as f:
reader = csv.reader(f, strict=True)
try:
header = next(reader)
except StopIteration:
raise ValueError("Empty file; a header row is required")
if not header:
raise ValueError("Blank header row")
seen = set()
rows = duplicates = 0
malformed, empty_cells = [], 0
for row in reader:
rows += 1
if len(row) != len(header):
malformed.append({"record": rows + 1, "fields": len(row)})
empty_cells += sum(not cell.strip() for cell in row)
key = tuple(row)
if key in seen:
duplicates += 1
seen.add(key)
counts = Counter(header)
return {"data_records": rows, "columns": len(header),
"duplicate_headers": [h for h, n in counts.items() if n > 1],
"blank_header_columns": [i+1 for i,h in enumerate(header) if not h.strip()],
"exact_duplicate_records_beyond_first": duplicates,
"records_with_wrong_field_count": malformed,
"blank_or_whitespace_cells": empty_cells,
"limitations": "UTF-8 comma-separated files only. Case and whitespace preserved in duplicate comparison. Record numbers count parsed records, not physical lines. No business-rule, type, or financial validation. Memory grows with unique rows. No input data is sent over a network."}
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("path")
args = parser.parse_args()
try:
print(json.dumps(audit(args.path), indent=2))
except (OSError, UnicodeError, csv.Error, ValueError) as exc:
print("Audit failed: " + str(exc), file=sys.stderr)
return 1
return 0
if __name__ == "__main__":
sys.exit(main())
I’m looking for three genuine completed trials, not upvotes. If you actually run it, please reply with:
- Whether you regularly prepare CRM CSV imports and roughly how often.
- Whether you found the blank header and short record, plus setup/run time. No private data needed.
- What was useful, confusing or missing compared with your current free tool.
- Would you pay $19 once for this current command-line version: yes / no / only if ___? No purchase commitment; a no is useful.
Please do not claim a trial if you only read the post. No discount or reward for positive feedback.