Free · open source · runs in your coding agent
foundby keeps a ledger in your repo of every way a person has ever reached your site: referring hosts, AI assistants, link previews, in-app browsers, backlinks and web mentions. Each run reports only what is new, and your agent looks up every new one and writes down what it is.
Paste it into Claude Code, Codex, Cursor or any agent that reads a SKILL.md. Or install by hand: git clone https://github.com/preziotte/foundby .claude/skills/foundby
FOUNDBY · example.com · new since 2026-10-22 (7d window, 184 rows in ledger) NEW blog skinnypuppy.eu 25 via edge NEW video youtube.com 3 via web youtube.com/watch?v=… NEW forum news.ycombinator.com 9 via edge,web NEW directory github:someone/awesome-music-tools 0 via web github.com/someone/awesome-music-tools NEW unfurler unfurl:Discord 14 via edge junk (3): 185.220.101.4, seo-tools.xyz, translate.goog PAGE forum reddit.com reddit.com/r/WeAreTheMusicMakers/comments/… SURGE search duckduckgo.com 41 was ~2.1/day sources: edge 2026-10-22..2026-10-29 (168h) · ga 2026-10-22..2026-10-29 · mentions hn:1 github:4 bluesky:2 lobsters:0 youtube:3 · bing API returns no links for this site to look up (3): skinnypuppy.eu, news.ycombinator.com, youtube.com
Mention trackers and backlink tools list hosts. They do not open each one, decide that this one is a Spanish AI-music tutorial worth a thank-you and that one is a parked domain never to be shown again, and write that into a file you own. That is the part that makes the report readable, and it is only cheap because the agent is already there.
Every host, agent and platform ever seen, with first-seen date, kind and a note, in docs/foundby.md next to your code. Each run covers exactly the gap since the last one. Junk surfaces once.
The report ends with the hosts worth a look. The agent fetches each, searches for the page that links you, and records a kind and a one-line note. Hand edits in the markdown stick.
Runs on your machine with your credentials. State is two files in your repo. Client IPs are never read. Nothing is sent anywhere that you did not already pay for.
foundby doctor reads your analytics property, prints the channel mix, and tells you which of these would add the most for your site. A site with only a domain still gets the mention search.
| Source | Sees | Blind to | Needs |
|---|---|---|---|
| Mention search | Pages that talk about your site whether or not anyone clicked: Hacker News, GitHub code (awesome lists, READMEs), Bluesky, Lobsters, YouTube video descriptions, Reddit | X, Instagram, TikTok | Nothing. gh auth login for GitHub |
| Google Analytics 4 | utm and gclid sources, GA's AI Assistant channel, in-app browsers (TikTok, Instagram), referring pages with three custom dimensions | Anything without JavaScript: agents, unfurlers, ad-blocked visitors | A service account on the property |
| CDN edge logs | Every request: referrers without JS, link unfurlers (each one a private share in Slack, Discord, iMessage), AI live-fetch agents (ChatGPT-User, Claude-User, Perplexity-User) | Native apps and email clients send no Referer | CloudFront standard logs in S3, the aws CLI |
| Bing Webmaster | The backlinks Bing knows about, via the only free backlink API | Most backlinks; often empty | An API key |
Setup, cost and blind spots of each, including the GA custom-dimension snippet, are in docs/sources.md.
Python 3.10+, standard library only (plus cryptography for the GA token). One foundby.json in your repo.
git clone https://github.com/preziotte/foundby .claude/skills/foundby python3 .claude/skills/foundby/scripts/foundby.py init example.com python3 .claude/skills/foundby/scripts/foundby.py doctor python3 .claude/skills/foundby/scripts/foundby.py run /tmp/foundby python3 .claude/skills/foundby/scripts/foundby.py set skinnypuppy.eu --kind blog --note "Fan site, links from an inner page" python3 .claude/skills/foundby/scripts/foundby.py view
Pages that mention your site whether or not anyone clicked (Hacker News, GitHub, Bluesky, YouTube descriptions), link previews fired when someone pastes your URL into Slack, Discord or iMessage, AI assistants fetching a page to answer a question, and referring pages rather than just hosts. It also reads GA itself, so you get the union.
No. There is no foundby service. The scripts run on your machine, call the public APIs and your own analytics and log bucket with your credentials, and write two files into your repo. Client IPs are never read from logs.
No. A site with only a domain gets the mention search. GA4, CloudFront logs and Bing backlinks are optional and each one adds a layer. doctor looks at what you have and says which would add the most.
The scripts find new hosts. The agent fetches each one and decides what it is: a tutorial worth a thank-you, a directory that listed you, a parked domain never to be shown again. That one-line note is what makes the ledger readable, and it is only cheap because the agent is already there.
foundby records the live-fetch agents, because a person was behind each one. For crawlers, training bots and the full picture of what AI agents do on your site, use agenttraffic, which reads the same logs. foundby is about people; agenttraffic is about agents.
They are a magnitude, not a count: edge hits plus GA sessions overlap. The point of the ledger is the first-seen date and the note, not the number.