detection report

Eddie Sheehy

scraping, anti-bot & browser automation · detection report v1

status: written by a person

I figure out why scrapers get blocked, and how to make them cheaper to run. Usually the answer is in the fingerprint, not the proxy.

I also spot the tells that make a website or design read as AI-made. There are two examples below.

now
Scraping Infrastructure Engineer, ScrapeOps. CTO and co-founder, Armed Solutions.
does
Scraping infrastructure and full-stack engineer: Go, TypeScript, Python, Postgres, Stripe.
based
Kerry, Ireland. Remote, Irish time.
open to
Freelance: fixed-scope audits and short builds, alongside my full-time role.
degree
BSc Computer Science and Information Technology, University of Galway, 2020–2024.
cv
Read it here or download the PDF.
§01verified against the repo

Selected work

May–Nov 2026 · one platform · 26 shipped units · 8 client sites · ~860 commits, alongside a full-time engineering job

CASE 01 · payments · Aug–Nov 2026

Direct booking against someone else's inventory

Problem
A holiday-rental agency wanted guests to book and pay on its own site, but its property management system (Lodgify) owns the calendar and prices.
Built
A custom Stripe checkout, instalment payment plans, abandoned-checkout recovery, multi-currency charging (guests pay in their own currency, the agency settles in euros), and a reconciliation sweep.
The hard part
Money and inventory live in two systems that can disagree. Payment is captured before the booking is created, so a guest ends up either paid and booked or charged nothing. A refund is only issued once the booking system conclusively shows there's no booking; anything inconclusive goes to a human. Late 3-D Secure confirmations are judged by Stripe's own timestamp, not the server clock.
Result
Live on the client's site, charging real cards and writing real bookings.

CASE 02 · booking · Sep–Nov 2026

A room booking engine that can't double-sell a night

Problem
A B&B needed native online booking, while also selling rooms on Booking.com and Airbnb.
Built
Room types, a nightly calendar, holds, quotes, instalments, refunds, guest manage-booking, staff desk tools, and a two-way calendar mirror with the Beds24 channel manager.
The hard part
Every booking write runs in a serializable transaction with retry, so two guests can't take the same night. The channel-manager sync recognises its own bookings even though the API doesn't store the reference it needs, and it cancels rather than deletes.
Result
Online booking is open on the live site, with OTA stays on the same calendar. It's the pilot for a direct-booking product priced at a few percent instead of ~15% platform commission.

CASE 03 · infrastructure · Jun–Nov 2026

One codebase, isolated client deployments

Problem
Run many client businesses from one platform without one client's site being able to see another's data.
Built
Each client's site ships as its own container, compiled from the shared codebase with every other client's routes and assets stripped out at build time. Each client gets its own database role, with row-level security on the shared Postgres. Every branch gets its own preview environment.
The hard part
Enabling row-level security on a database that live, unchanged client sites were already reading. It was rolled out so nothing running broke, with checks that block destructive migrations and table-locking indexes before they ship.
Result
Client sites run as separate containers on their own domains.

CASE 04 · infrastructure · Jul 2026

Moving production off managed hosting

Problem
Move the platform, client sites and database from managed services to self-run servers.
Built
Docker deploys with rollback, a TLS edge serving custom client domains, health checks that fail when the database is down, error monitoring, connection pooling, and continuous backups.
The hard part
The database cutover. Staging-clone validation, a backup-restore drill and a maintenance window, with the guarantee that the platform and client sites never wrote to different databases mid-move. Restore drills now run against the backups.
Result
Cut over on 23 July 2026.

CASE 05 · payments · Jun–Nov 2026

Gift vouchers and session passes on Stripe Connect

Problem
Small businesses wanted to sell gift vouchers online as the merchant themselves, with no marketplace in the middle.
Built
Stripe Connect onboarding and direct charges, three sales channels (hosted page, embeddable script, API), QR and barcode vouchers with a scanner, PDF delivery, and a ledger for multi-session passes.
The hard part
Keeping voucher state in step with Stripe events across many connected accounts. Refunds and disputes void vouchers, and fulfilment is safe whichever arrives first, the redirect or the webhook.
Result
In progress.

CASE 06 · hardware · Nov 2026

Signage you install by flashing a card

Problem
A holiday-rental agency needed digital signage on Raspberry Pi screens, installed on site by someone other than me.
Built
A ready-to-flash Raspberry Pi image. Write it to the card, put it in the Pi, and the signage is ready to go, with nothing to set up after. Two shop-window TVs, one wide and one upright, play a slideshow from a folder on the card, with the Armed Solutions logo showing while they boot. To change the pictures, copy new ones onto the card from a laptop.
The hard part
Making it safe to unplug at any time, with no network, keyboard or password. The image is built from the official, checksum-verified Raspberry Pi OS, gets through first boot without asking anything, then seals its own system as read-only so a power cut can’t corrupt the card. The slides folder stays writable, and a marker file in it rotates the portrait screen. It’s boot-tested in a container before it ships.
Result
Both screens are live in the shop window. The installer set them up from the image and an 11-page guide, without me on site.

Smaller builds

  • Timed-slot booking for a shared-capacity venue, safe against overbooking races.
  • First-party, per-client website analytics with no third-party tracker.
  • Passkeys, MFA and login rate limiting on the platform admin.
  • A pipeline that sources local businesses and drafts outreach with an LLM, held for human approval.
  • Making the agency site readable by AI agents: markdown versions of pages, llms.txt, and WebMCP tools.
  • A restaurant table-booking system with a live floor plan, built and then deliberately removed (16k lines) once it wasn't worth maintaining.
  • 8 client marketing sites from one site registry.

specimen aI can spot these. Like this:

🚀 Now with GPT-powered extraction →

Elevate Your Scraping Journey with AI-Powered Insights ✨

Unlock seamless, robust data pipelines that empower your team to harness the full potential of the web. No code. No limits. Just results.

Get Started Free → ▶ Watch Demo
AI Insights +312%
  • Flagged: indigo-500 → purple-600 gradient text
  • Flagged: emoji eyebrow pill
  • Flagged: unlock / seamless / robust
  • Flagged: gradient CTA + shimmer sweep
  • Flagged: glassmorphism, backdrop-blur
  • Flagged: chart with no axes, no data

VERDICTgenerated. confidence 0.97. signals: 6

§025 items, 0 cards

What I do

  • Diagnose blocks. I replay your traffic, diff it against a real browser and find the request that gives you away.
  • Fingerprinting & TLS. JA3 and JA4, HTTP/2 settings, header order, canvas and fonts: the details that decide whether you look like a browser to Cloudflare, Akamai or DataDome.
  • Browser automation at scale. Camoufox and CDP-based fleets in containers, behind load balancers, on bare metal you control.
  • Cost & reliability audits. Fewer retries, cheaper proxy tiers where they hold up, and plain HTTP where a browser was never needed.
  • AI audits. I go through a website, app or poster for the tells that make it look AI-generated: copy, layout, colour and imagery. You get the list, and the fix for each one.
§03fixed scope, no retainers

How engagements work

  • 01 · auditFixed-scope audit. You send the target and your current setup. You get back a written diagnosis: what is blocking you, why, and the fixes in order of effort.
  • 02 · hands-onShort engagements. A week or two where I make the fixes myself, in your code, and hand it back working.
  • not offeredOngoing maintenance. The goal is that you don't need me afterwards.

specimen bI can spot these. Like this:

0101101011000101100110010010011100 WEB SCRAPING SUMMIT 2026 WEB SCRAPNG SUMMMIT 2O26 · DATA EXTRACKTION FOR THE FUTUR the futur is now! FREE* ENTRY!! SATURDAY 31TH OCTOBRE 9AM – LATE PM · DOORS 8:61 Spnosered by Dtaa Leadres · Regsiter nwo at wwww.scrapng-sumit.coom ЯΣGIƧTΣЯ ПOW · ꟻЯΣΣ ᗷΣΣЯ · ⱭᏞᏞ ᗯΣᏞCOMΣ · lorme ipsmu dolro Tcikets lmitied. Termz & condishuns aplly. Na refnuds wtihout reciept
fig. 1 · generated for this page, by hand
  • Flagged: 6 fingers
  • Flagged: garbled text: 'SCRAPNG'
  • Flagged: 5 typefaces
  • Flagged: no negative space
  • Flagged: style clash: vector / 3D / brush
  • Flagged: teal-orange grade
  • Flagged: '31TH OCTOBRE'

VERDICTgenerated. confidence 0.99. signals: 7

§04side projects

Things I've built

  • SortDeck. A model trained on photos of Pokémon cards that tells each card’s generation and type from the image, with a confidence score, built on CLIP embeddings and OpenCV. The plan was a 3D-printed sorting machine run by a Raspberry Pi. I retired it before building the machine. retired
  • ServerMonitors. A stock-alert service: about fifteen pluggable shop adapters (Shopify, WooCommerce, BigCommerce, Squarespace and others), a FastAPI server on a VPS, Discord alerts, and a portal where subscribers log in and pick what to watch. Adapters are tested against responses captured from real shops. 2026
  • A trading-card competitions site. Next.js and Prisma, with accounts and email verification, chosen entry numbers, a skill question, a wallet balance and Solana payments through Phantom. I later put it through my own security audits: auth and sessions, input validation, PII in logs, and draw fairness. 2025
  • Lantic. My final-year project. Type an Eircode and see average house prices and rents nearby, your commute to work, and the amenities around it on a map. The listing data came from a small Flask API I wrote and deployed in Docker. 2024
  • Where it started. Discord stock monitors for consoles, PC parts and trainers across Irish and UK retailers during the 2020–21 shortages, hosted on Heroku for friends. Learning the hard way to alert once per restock, not on every check. 2020–21
§05Kerry, Ireland, remote

About

I'm Eddie Sheehy, a software engineer in Kerry, Ireland. I work on scraping infrastructure full-time at ScrapeOps: bot detection, TLS fingerprinting, browser fleets and proxies. What I do there.

I'm also CTO and co-founder of Armed Solutions, which builds web and booking platforms for hospitality businesses. What I’ve built there, in plain English.

I build the Armed Solutions platform in evenings and weekends. Most of it shipped in five months of 2026.

I work remotely, with teams anywhere.

Experience

  1. Feb 2025 – now · Full-time · Remote

    Scraping Infrastructure Engineer, ScrapeOps

    Proxy routing, anti-bot handling, cloud browsers and the product around them. What I do at ScrapeOps.

  2. May 2026 – now · Own company, evenings and weekends · Dingle

    CTO and co-founder, Armed Solutions

    Built and run the platform behind our clients’ websites, bookings, payments and back office. What I’ve built at Armed Solutions.

  3. Jun – Oct 2024 · Full-time · Galway, hybrid

    Postgraduate Research Assistant, University of Galway

    Software engineer on a research team rating pavement conditions on greenways from sensors on bikes and scooters. Built the React web app that maps the surveyed routes, and the APIs and database behind it on a self-hosted server.

  4. Jan – Sep 2023 · Internship · Galway, hybrid

    Software Developer, IBM

    Front-end and back-end work on IBM’s SOAR security platform. Cleared static-analysis code issues, and was one of the top code contributors by the end of the internship. Python, Jenkins.

  5. Jun – Sep 2022 · Internship · Dingle

    Software Engineer, Net Feasa

    Worked on LoRaWAN farm sensors, from Tekelek milk-tank levels to weather stations, for on-farm pilots with Teagasc. Python and servers.

Education

BSc Computer Science and Information Technology, University of Galway, 2020 – 2024. Final-year project: Lantic, an Eircode property explorer with its own pricing API.

Skills

Languages
TypeScript, JavaScript, Go, Python, SQL
Web
Next.js, React, Node.js, Express, Astro, Tailwind
Data and infra
Postgres, Prisma, Redis, Docker, Linux servers, CI and preview deploys, Sentry
Payments
Stripe, Stripe Connect
Scraping
Proxy routing, TLS and HTTP/2 fingerprinting, Playwright, Puppeteer, Camoufox, CDP

Earlier

At school, co-wrote and self-published a smartphone guide: 150 copies, sold out in two weeks. Munster winner and national runner-up, Junior Achievement Ireland Young Entrepreneur, 2018.

§06plain links

Contact

For scraping work, send the target and what is going wrong. For anything else, tell me what you’re building.

email
eddie0sheehy@gmail.com
phone
+353 87 109 8386
github
GitHub
linkedin
LinkedIn
footer · self-test
$ detect --page / --containment strict
> loading signatures .................... 16 words, 2 phrases
> specimens found ....................... 2
> sealing containment ................... ok
> fonts outside containment ............. Source Serif 4, JetBrains Mono
> gradients outside containment ......... 0
> box shadows outside containment ....... 0
> rounded corners outside containment ... 0
> purple, indigo or violet .............. 0
> emoji outside containment ............. 0
> banned words and phrases .............. 0
scan complete. specimens contained: 2. signals outside containment: 0.