Failures are reported
A script that fails silently is more dangerous than the manual task it replaced. Every failure sends a notification to a person.
For the manual job somebody does every week.
Most of my Python work is not building websites. It is removing the repeated manual task – the spreadsheet somebody reconciles every Monday, the report assembled by hand, the data pulled from one system and typed into another.
Almost every business has tasks that a person does repeatedly because nothing joins two systems together. Downloading a report, reformatting it, cross-referencing it against another file, and emailing the result. Copying orders from one platform into another. Checking a supplier’s prices by hand. Assembling the same monthly figures from four places.
These tasks are individually small and collectively enormous. Four hours a week is five working weeks a year, and the cost is not only the hours – it is that the work gets skipped when someone is on leave, and that a manual process performed two hundred times contains mistakes nobody has found.
Python suits this work particularly well. The standard library and ecosystem cover spreadsheets, PDFs, databases, HTTP, email and scheduling without much ceremony. A useful script can be a hundred lines. That means automation is worth doing for tasks far too small to justify building software in a heavier language.
The other half is data work: cleaning and reconciling messy exports, transforming data between systems that disagree about formats, generating reports from several sources, and scraping information that is only available on a web page. Unglamorous, and reliably the thing that frees up the most time.
Scripts that do the repeated manual job on a schedule, with logging and alerts when something goes wrong.
Hours returned every week, and a task that happens even when someone is away.
Turning messy exports into consistent, usable data – deduplicating, normalising and validating.
Decisions made on data you can trust rather than a spreadsheet nobody quite believes.
Pulling figures from several sources and producing the same report every time, on schedule.
Reports that arrive without anyone assembling them, formatted the same way each month.
Collecting data that is only published on web pages, respectfully and within what a site permits.
Information you currently gather by hand, gathered reliably instead.
Connecting systems that do not talk to each other, with retries, rate limiting and proper error handling.
Data moving between systems instead of being re-keyed by a person.
Small applications and command-line tools for the jobs your team does often.
Work that currently needs a specific person can be done by anyone.
Unattended code has to fail loudly or it is worse than no code.
A script that fails silently is more dangerous than the manual task it replaced. Every failure sends a notification to a person.
What ran, when, what it processed and what it changed – so when a figure looks wrong there is a record rather than a theory.
Written so running the same job again does not duplicate data or double-count, because that will happen eventually.
API keys and passwords in environment configuration, never committed to a repository and never in the script itself.
Clear setup instructions and sensible defaults, so it does not become one person’s private tool.
If a task takes ten minutes a month, automating it will not repay the cost. You will hear that rather than a quote.
Anyone with a recurring manual job and a person doing it.
Reconciling, checking and re-keying between systems that were never connected.
Monthly reports assembled by hand from several sources, the same way every time.
Stock, pricing and order data moving between a store, a marketplace and an accounting system.
Client reporting compiled manually every month across several platforms.
Old software with no API, where data has to be extracted somehow.
A workbook that has quietly become critical infrastructure.
Bangalore is full of Python capability aimed at data science, machine learning and product engineering. What is harder to buy is a small, practical piece of automation: one task, done properly, for a business that does not want a data team.
The work here often involves Indian specifics – GST return preparation from transaction exports, reconciling payment gateway settlements against orders, and pulling data out of portals that offer a download button and nothing resembling an API.
I work with businesses across Bangalore and India, and with clients in the UK, USA, Canada, the UAE and Singapore. Most of these jobs are small, fixed pieces of work rather than projects.
One task automated properly, not a data programme.
Return preparation and settlement matching.
Getting data out of systems with no API.
India, the UK, USA, Canada, the UAE and Singapore.
Serving Chennai, Bangalore, India, Canada, UK, USA, Dubai, Singapore.
The same patterns, in very different businesses.
Typically needs: Stock, pricing and orders spread across a store, marketplaces and accounting.
How I help: Scheduled synchronisation with conflict rules, plus settlement reconciliation against orders.
Typically needs: Monthly returns and reports assembled by hand from several exports.
How I help: Transaction data consolidated and formatted for filing, with validation that flags anomalies.
Typically needs: Tracking statuses checked manually across several courier portals.
How I help: Scheduled status collection into one view, with alerts on exceptions rather than a daily check.
Typically needs: Production and inventory figures re-keyed between systems.
How I help: Automated extraction and loading with validation, so the numbers agree without anyone typing.
Typically needs: Listing data maintained across several portals by hand.
How I help: One source of truth pushed out to each portal, with failures reported per destination.
Typically needs: Client reports compiled from several platforms every month.
How I help: Scheduled collection and report generation, formatted consistently and delivered automatically.
Small and fixed. Most of these are days rather than weeks.
I watch or have described the task exactly as it is done now – every step, every exception, every judgement call somebody makes without thinking about it.
You get: A written description of the process and an honest view of whether automating it pays back.
Why it matters: The undocumented judgement calls are what break naive automation, and they only surface by asking.
We settle what gets automated and what stays manual, where the data comes from, how often it runs and who hears about failures.
You get: A scope and a fixed quote, usually small.
Why it matters: Automating the awkward five per cent often costs more than the other ninety-five, and is frequently not worth it.
The approach is designed: scheduled or triggered, where it runs, how credentials are stored, how failures are reported and what happens if it runs twice.
You get: A technical approach you have agreed, including the failure behaviour.
Why it matters: Deciding failure behaviour afterwards is how unattended scripts end up failing silently for weeks.
The script is written with logging, retries and validation, and run against real data so the edge cases show up while someone is watching.
You get: Working automation, tested on your actual data rather than a sample.
Why it matters: Real data always contains things the description did not mention.
It runs alongside the manual process for a period, and the results are compared before anyone stops doing it by hand.
You get: A verified period where both agree, and the discrepancies explained.
Why it matters: Trusting automation before it has been checked against the manual result is how errors get baked in.
Scheduling, monitoring and alerting set up, then written instructions for running it, changing it and interpreting a failure.
You get: A scheduled, monitored job and documentation anyone can follow.
Why it matters: A script only one person can run has swapped one dependency for another.
Chosen for the task, not for the CV.
Scoped against one real task rather than offered as a package.
Automation work has nothing to do with search visibility, and it would be dishonest to pretend otherwise. The relevant discipline here is different: scraping responsibly, and keeping credentials and data secure.
Where scraping is involved, I work within what a site’s terms and robots directives permit, at a request rate that does not burden it. If a site prohibits it or an API exists instead, I will say so rather than proceed.
Most of the value in data work is making information consistent: the same field names, the same date formats, the same identifiers across systems that each had their own opinion. That is what makes data usable by anything downstream, whether a report, a dashboard or a model.
The practical reasons, rather than the adjectives.
If a task takes ten minutes a month, automating it costs more than it saves. You will get that answer rather than a quote, because the arithmetic is the point.
Unattended code that fails silently is worse than the manual task it replaced, because at least a person notices when they have not done something. Every job alerts a human.
Most of these are days rather than weeks, quoted as a fixed piece of work. You do not need a project or a retainer to remove one recurring task.
Written instructions, sensible defaults and no hidden setup. A script only one person can run has just moved the bottleneck rather than removed it.
Tell me what you need. I reply within one working day, and the first conversation costs nothing.