Senior Python Engineer · MarTech & Ad-Platform Automation
5+ years building the backend systems that launch and measure advertising at scale. Ad-platform automation, AI creative generation and the data infrastructure underneath — shipping things that work, with the depth to catch what AI misses.

I’m Shashwat Agarwal, a Software Development Engineer and AI enthusiast based in India. I blend engineering rigor with an AI-first mindset to build products that genuinely move the needle.
My career spans Python back-ends, LLM pipelines, conversational AI, and data infrastructure across fast-moving MarTech and mobility startups. Today that means ad-platform automation — the systems that take one campaign configuration and put it to work across every major ad network.
I’ve been inside AI tooling since the GitHub Copilot beta in 2021 — before it was a job title. Moving toward AI work was never an assignment; I pushed for it, because I wanted to find out what it could actually do.
I work as an AI-augmented engineer: AI is a multiplier on engineering judgement, not a substitute for it. That means using it where it genuinely compounds — generation, review, the tedious middle of a migration — while owning the architecture, the failure modes and the production behaviour myself. I adopt these workflows early, keep the ones that survive contact with production, and retain enough depth to catch what the model gets wrong. Bachelor’s in Computer Science from Krishna Engineering College, India (2021).
AI is a multiplier, not a replacement. The engineers who will matter most are the ones who can tell when AI output is wrong — and fix it without asking the AI to fix itself.
Shipping something real beats perfecting something hypothetical. Speed of learning beats speed of building — but you only learn by building something users can break.
The best teams run on trust and clear ownership, not process. We take on deliverables that look impossible on day one, and we aim for the first working implementation rather than the best one — because by the time the best one lands, the requirement has often moved. That pace only works if people are trusted with context instead of managed through a queue.
FastAPI over Django because the architecture is microservices and FastAPI stays lightweight — and over Flask because async was non-negotiable. PostgreSQL for the reporting service, where the shape is fixed and the queries are analytical; MongoDB for the launch service, where every network’s config is dynamic and half-structured; ClickHouse for ingesting high-volume reporting data. CrewAI because I can define discrete crews with assigned jobs, instead of handing one agent everything and hoping. The ad-network list is not a wish list either — each one is a live integration with its own auth model, campaign hierarchy and rate limits, and each was added because buyers were already spending there.
Joined the founding Python team as an individual contributor, promoted to Team Lead within a year and to SDE III in September 2026. I lead the backend team across two MarTech products built on shared infrastructure: FabFunnel, the client-facing platform our clients’ media buyers work in, and Lookfinity, the internal platform for in-house teams. Same core underneath, two very different audiences.
Every ad network runs on nearly the same campaign structure, but Meta, Google, TikTok, Snapchat, Taboola, Reddit and NewsBreak each name things differently and each is missing something the others have. Media buyers were launching platform by platform, by hand, at volume. I architect the systems that launch roughly 200,000 ads per day across 100+ ad accounts from a single form, unified across every major ad network. The hard parts are not the API calls: idempotency so a retry or a double-submit can never double-spend, auto-scaling to absorb launch-day spikes, and retry semantics that know the difference between a rate limit and a rejection.
The Python work began with a constraint worth respecting: Google’s Ads SDK was first-class in Python while our stack was Node. I built the company’s first Python reporting service around it, which opened the door to the work we actually wanted — AI creative generation for both video and image, running on self-hosted GPU infrastructure with ComfyUI pipelines, conditioned on geography, keywords and psychological triggers. Because buyers ship at volume, near-identical creatives were crowding out the top-performer leaderboard, so I built a video hashing system to collapse duplicates and keep the rankings honest. Alongside it, an ad-library intelligence service built on public ad libraries only, so users can build against real market signal rather than guess.
A three-month contract as a Full-Stack Python Developer on the Innovations Refund platform, working across Django and React on a tight timeline. I took it because the problem was good, not because I needed a bridge: a centralized FinTech platform where banks aggregate and loan flows originate in one place. Centralization was the interesting part — structurally the same problem I would go on to solve for ad networks a year later.
First professional role. Built on the Odoo platform, developing integration connectors including a WhatsApp connector and a Shopify connector. Promoted to Associate within 6 months — continued extending platform integrations, applied machine learning to product features, and deepened backend ownership across the stack. I left when the role started drifting from Python into mostly SQL work. I wanted to keep going deeper in Python, not sideways.
Small things I ship on my own time, mostly to stay close to the parts of building that a backend role does not touch — distribution, onboarding, and what a platform does to you after launch. Three Chrome extensions, all live on the Web Store: Manifest V3, built with Vite, everything on-device — no accounts, no servers, no telemetry. Plus 108 apps on the Odoo App Store and a Codex plugin for Odoo.
One key takes the tab you are on off the screen, or swaps it for an innocuous decoy page, before you share your screen or someone walks past. The tab is never closed — it keeps running, so a half-typed form, a logged-in session and a playing video all come back exactly as you left them. Two permissions, no page access.
Fills any form with plausible test data in one click, generated entirely on-device. Built for the part of development where you need a believable name, address and card number twenty times an hour and typing “asdf” stops being funny. It never submits the form.
Bookmark any moment in a video, revisit your saved sections in sequence, and turn them into flashcards so spaced repetition makes it stick. It started as a problem I had as a junior engineer living in long tutorials with no way to save what I found; the idea sat with me for years before I built it.
Small, single-purpose apps for Odoo 19 and 20, 54 free and 54 paid: compliance work such as GDPR retention, Romanian SAF-T and US 1099 reporting, inventory reports, access-rights tooling and ad-platform connectors. Every app has a narrated demo video on YouTube and its own page on mithahara.com.
A Codex plugin that lets you ask questions of your own Odoo: overdue invoices, who can see a model, the history of a record. It talks to an Odoo MCP endpoint you run, through read-only tools, so nothing is written and no data leaves your server. Install it with one codex plugin marketplace add command.