Earlybird Admin

Admin sign in

Sign in with an account that has a matching admins/{uid} document in Firestore.

Health

Loading…
Loading…
Reading LinkedIn
–
Server reads
–
Scheduled jobs
–
Services
–

Page check

Loading…

Live reading share of reads that found something, 14 days

Loading…
Now
Loading…
Worked Partly worked Failed Did not run, or nothing to judge Page check day
Reader detail
Extractor Health
Earlybird reads about twenty things out of LinkedIn's HTML - who posted, the text, the counts, the link. When LinkedIn changes its markup a reader returns nothing rather than failing, so nothing breaks visibly and the board just gets quieter. This is what watches for that. One row per place Earlybird reads, not per reader: a green row means every reader on that surface is behaving, and there is nothing to do. Click a row to see the individual readers and what each one is for. Anything broken is opened for you.
Loading...
Where Earlybird was readingReads yesterdayWorkedState
Loading...

Growth

Weekly pulse

Activatedused on 3+ days in their first 7 In progressstill in their first 7 days, not counted yet Came backused at least once in that 7-day span
Signups, last 7 days
-
Loading...
Activated
-
Weekly active users
-
Came back, days 8–14
-
By signup week
Signups
Loading...
Activated %
Who keeps coming back
Loading...
0%100% came back some not there yet blank = not reached yet faded = under 5 people

Funnel

Grey bars are typed in from Umami and the Chrome Web Store below. Coral bars come from Earlybird itself. Weeks start on Monday, Sydney time. A trial lasts seven days, so the newest signups have not had the chance to pay yet.

Loading...
Visitors by channel
ChannelVisitorsSpendPer visitor
Loading...
How they heard about Earlybird
AnswerSignupsSet upPaid
Loading...
Enter a week

Umami: set the date range to the week, then copy the Channels tab and the add-to-chrome event count. Chrome Web Store: Analytics, same week. Spend is what the ad platforms charged. Leave anything you don't have blank.

Week of
Umami channelVisitorsSpend $

ChatGPT Ads

Loading...
Spend, last 7 days
-
-
Clicks, last 7 days
-
-
Cost per click
-
last 7 days
Impressions, last 7 days
-
-
By day
DayImpressionsClicksCTRSpendPer click
Loading...
Spend is reported 7 to 8 hours behind clicks, so today's figure is not final.
By country, last 7 days
CountrySpendShareClicksPer click
Loading...
Ads
AdStatusReviewClicks, 7 daysSpend, 7 days
Loading...

Users

Users
-
- active today
Online-ish
-
last 10 minutes
Discover
-
- total sampled
Posts Analysed
-
today, Sydney
Users' Posts Captured
-
- total sampled
Users' Comments Captured
-
- total sampled
Users
Total usersActive, Sydney day, used Earlybird on the extension or webScrolled LinkedIn with the extension, UTC day, until 3 NovFaded lines are the 30 days before
Loading...
Days are Sydney dates. The Sydney line starts on 4 Nov 2026, when it began being recorded, and the UTC line stops the day before. A UTC day runs 11am to 11am Sydney time. Total counts accounts by sign-up date, so a deleted account is not counted on any day. Today is still counting, so its point pulses and the line into it is dotted.
Posts Analysed
Loading...
Users
On builds before the capture-stamp fix, Last seen and Version are written only when the panel is opened — a tester browsing with the panel shut reads as idle however much they capture. Analysed and Comments are the columns that tell the truth for those rows. Comments are counted by when the comment was posted, not when Earlybird captured it — a first-run import writes hundreds of old comments at once, and bucketing those as "today" would make a backfill look like a conversation. The read behind it covers the last 8 days of captures, capped at 2,000 documents; the Users' Comments Captured card above says so outright if that cap is ever reached.
UserLast seenAnalysedCommentsVersionPlan
Loading...

Versions

Loading...

Billing

Subscription Status

Loading...
Checkout Errors
-
- attempts sampled
Free-Time Promo Codes

Codes that extend a user's free trial — redeemed inside the extension (Account tab, or the trial-ended screen). These live outside Stripe; price discounts are still Stripe promotion codes redeemed at checkout.

CodeDaysUsesExpiresStatus
Loading...

Offers

Banners in the extension

Banners across the top of the extension, such as an upgrade offer for free users. They ride the settings every extension already reads once a day (extractionConfig/feed, field offersJson), so they cost no extra reads and reach everyone within 24 hours. Each extension decides for itself whether an offer applies. FREE-TIER.md §6.

MessageButtonWhoRunsStatus
Loading...

Board

On the board right now

Loading...

Data Quality

Loading...
Duplicate Audit
The same post stored twice. merge means it is safe to fold together - the green copy keeps everything both copies know (the longest engagement curve, the highest counts, whichever has text or an image) and the red one is deleted. Approve merge asks the server to do it: it re-checks the evidence itself and refuses anything it cannot independently call a duplicate, and every copy is backed up to dupeMergeBackups before the delete. CHECK means it looks like a duplicate but the evidence disagrees, so nothing will touch it until you have looked. Open both posts and compare; if they are the same post, that is a gap in the extension worth telling me about. Approve all merges does exactly that to every green row in turn, one server call each - the function still re-derives the evidence for every copy on its own and still refuses anything it cannot verify, so the sweep is the same clicks rather than a looser way in. The nightly sweep (08:00) does all of this unattended, so most mornings this table should already be empty; it re-plans on the server rather than reading the table, which lets it fold in chains this table has to split - one post living in three documents, where A matches B on its words and B matches C on its numbers, can only show here as a pair. CHECK rows are never swept.
Loading...
Loading...
VerdictWhyAuthorThe two postsAction
Loading...
Embed Poll
Most board rows hold one engagement reading for life - whatever the numbers were the moment Earlybird first saw the post - and every tier decision is made on that number however old it is. A post found in its first hour is stored at the very bottom of its growth curve and never read again. This is the fix being tested: LinkedIn publishes reaction and comment counts on a public embed page that needs no login, so one request from Google's servers can refresh the shared row for every user at once, with no user's browser, IP or LinkedIn session involved. It does now write what it reads back to the shared board, so a refreshed row corrects that post for every user at once. It still refuses to write anything it is not sure of: never a reshare (whose embed reports the original's numbers), never a page that names a different post, and never a reading it could not take - a poll that failed must not be recorded as an answer, or the row is marked fresh and nothing looks at it again. It is still also a probe, measuring whether LinkedIn throttles the endpoint when requests come from a datacenter rather than a laptop. It picks what to read rather than cycling: posts that have never had a second reading come first, newest first, then whatever is due. A post is due every 30 min under 2h and every 2h after that, until it turns 24h old and is never read again — and a post growing slower than about 1 engagement a minute, the same bar it was let in on, waits twice or four times as long, because it is unlikely to have moved. It runs hourly and steps up in rungs, and only after a full clean day at the current rung: 96 calls a day, then 504, then 2,016. Any 429 (rate limit) or 999 (bot check) stops the run on the spot and cancels the ramp, because pushing through a throttle is what turns it into a ban.
Loading...
RunCallsAnsweredNothing thereBoard rows refreshedStill unreadState
Loading...
Notification Fast-Resolve
A post found via the notifications page already carries a real, resolved LinkedIn id - usually about 4 minutes after it was published - but used to sit in a user's local "found" list with nothing ever reading it, since only a manual visit or the hourly Embed Poll could reach it. This fires the instant one of those lands on the shared board instead, giving it a real reading within seconds rather than waiting up to an hour. It fires on every new board row but does nothing beyond one field check unless that row has no engagement yet - an ordinary capture already has real numbers the moment it's written, so this never spends a request on those. Capped at a persisted 100 calls/day (not per account - this fires for every user on the updated extension who finds something genuinely new), and any 429/999 pauses it for 24 hours, the same discipline as everything else on this page.
Loading...
WhenAuthorStatusWrote to boardNote
Loading...

Creators

Creator Watch
Every row on the board arrives because somebody scrolled past it, so the board is only as fresh as whoever happens to be browsing - the median post is found eleven hours after it was published, and 28% are found after a day. This is the first supply of posts that needs nobody online. A creator's signed-out profile page lists their last ten posts, and it carries a post 2.4 minutes after publishing, so how late we are is now the polling interval rather than a property of LinkedIn. It reads that page through a rotating residential proxy - the same page from Google's own servers is refused after about ten requests - and polls each creator tightly inside their own posting hours and slowly outside them, because three quarters of anyone's posts land in the same three hours of the day. It writes the post and nothing else: the embed poller reads the real engagement within seconds, so there is one definition of what a reaction count is. A found post goes straight onto the shared board and the board's own bar decides whether anyone sees it, so most of what this finds is written and never displayed - that is the design, not a fault. Anything still invisible a day later is deleted overnight.
Loading...
CreatorTierLast lookedTheir newest postLast lookAdded so farWhat they normally getState
Loading...

AI

Features

On: everyone with access. Preview: only accounts switched On below. Off: nobody. Changes reach the extension within ten minutes.

Loading…
Access

Default: a Pro plan or a live trial decides. On: switched on by hand, and sees features in Preview. Off: no AI at all, whatever the plan. Tester: the tester allowance (US$10 a month) and access without a plan. A change shows in the extension after the user's next sign-in or within the hour.

AccountPlanAITesterAI calls
Loading...
AI outputs

Every AI call, newest first, kept 90 days. Click a row to see what was sent and what came back.

WhenAccountCallModelCostTimeOutcome
Loading...

Features

Loading...

Tools

Feed Scroll Schedule

Automated LinkedIn feed browsing on Dan's Mac, so Discover keeps capturing posts on days nobody browses. Each run starts with a 0–10 min random delay and scrolls for 6–12 min.

Days
Times
LinkedIn Requests - Last 7 Days
Authenticated calls the extension makes to LinkedIn, counted where they all pass through (injected.js _auVoyagerFetch). Reading the feed costs nothing and isn't counted. A retry counts as an extra request; a call the rate cap refused isn't counted at all.
DateTotalBreakdown
Loading...
By hour, today
Loading...