Demo project - fictional leads - not client work. A Python script that cleans a messy lead export before it reaches your CRM or sheet: it fixes names, emails and UK phone formats, merges duplicates (same email, or same phone), keeps the earliest date, joins the notes, and writes a rejects file with the reason for every dropped row. It can then send each clean lead to a Zapier or Make webhook with retries and an idempotency key, so a re-run never double-sends. Sample run: 11 messy rows became 6 clean leads, 3 duplicates merged, 2 rows rejected. 6/6 tests pass, including a local webhook that fails the first call. Built with AI coding assistance, then tested and reviewed by me. Fixed price $80, delivered in 4 days, source code included.