trackagoat logotrackagoat/Docs

Command Palette

Search for a command to run...

Getting started

  • Welcome
  • Quickstart
  • Core concepts

Guides

  • Creators & Accounts
  • Creators
  • Instagram tracking
  • YouTube tracking
  • Videos
  • Campaigns
  • Creator Goals
  • Tracking Inbox
  • Content calendar
  • How scraping works
  • Analytics & metrics
  • Similar creator pools
  • Over-posting & suppression
  • Program Health
  • Sentiment Radar
  • API keys
  • Limits & plan tiers
  • Notifications
  • Payouts
  • Shareable creator pages
  • Conversions

API reference

  • Overview
  • Authentication
  • Errors
  • Projects
  • Creators
  • Accounts
  • Share Links
  • Videos
  • Content Groups
  • Campaigns
  • Analytics
  • Aggregate Analytics
  • Goal Compliance
  • Payouts
  • Conversions
  • Schema

For agents

  • Agent guide
  • Data model
  • MCP & tooling

Platform

  • Brand
  • Changelog
  • Support
DocsPlatform

Changelog

What's new in trackagoat.

PreviousBrandNextSupport

On this page

  • 2026-08-20: Payout periods now reconcile late posts automatically
  • 2026-08-18: Choose when a payout structure starts earning
  • 2026-08-18: CPM payout structures drop the unused amount field
  • 2026-08-06: Filter Payouts by campaign
  • 2026-08-06: View-incentive accruals resume automatically
  • 2026-07-30: Scrollable pickers no longer overlap their buttons in Safari
  • 2026-07-29: Payouts tells you when a creator has no structure assigned
  • 2026-07-29: Shareable creator pages
  • 2026-07-29: Conversion payout structures are editable again
  • 2026-07-27: Sandbox testing, and two fixes around it
  • 2026-07-24: Deleting a creator works again
  • 2026-07-22: Payouts page fixes
  • 2026-07-21: Get notified when a tracked account goes private
  • 2026-07-21: API v2 now matches its documentation
  • 2026-07-22: Pay creators for conversions
  • 2026-07-22: Hashtag matching fixes & org member removal
  • 2026-07-21: Conversions
  • 2026-07-20: Hashtag import mode
  • 2026-07-19: Accounts tab, durable avatars & docs refresh
  • 2026-07-17: Flexible accounts & creators + Content Calendar platform filter
  • 2026-07-16: Trackagoat 2.0: Instagram Reels & YouTube Shorts tracking
  • 2026-07-15: Clearer permissions, organization admins can manage payouts
  • 2026-07-14: Refreshed interface
  • 2026-07-10: Dates and counts now use your organization's timezone everywhere
  • 2026-07-07: Weekly payout periods now follow calendar weeks (Mon–Sun)
  • 2026-07-07: View incentives now show when the threshold was passed
  • 2026-07-07: Accruals export now includes view incentives
  • 2026-07-07: Backdate a payment when recording it
  • 2026-07-07: Payout recording fix and tracking-reliability improvements
  • 2026-06-10: Always-accurate plan limits
  • 2026-06-10: Clearer labels across the app
  • 2026-06-10: Security & access-control hardening
  • 2026-06-10: Photo carousels tracked correctly
  • 2026-06-10: Complete post capture, no more permanently-missed videos
  • 2026-06-10: Platform-wide reliability and data-accuracy audit
  • 2026-06-02: Health alerts are now logged and triageable
  • 2026-06-02: v1 API, full write coverage
  • 2026-05-20: System status page
  • 2026-05-20: Goal data advisories
  • 2026-05-19: Goals payouts now evaluate 48 hours after period close
  • 2026-05-16: Re-add a deleted creator by handle
  • 2026-05-16: Video tracking expiry rules
  • 2026-05-16: System-disabled creators visible to org admins
  • 2026-05-16: Edit creator TikTok handle
  • 2026-05-16: Operator email alerts
  • 2026-05-13: Sentiment Radar
  • 2026-05-13: Video Comments tab
  • 2026-04-30: Analytics section
  • 2026-04-19: Internal & public docs
  • 2026-04-17: Admin Control Plane
  • 2026-04-11: Multi-org support
  • 2026-04-11: API keys v2
  • 2026-04-10: Limits & plan tiers
  • 2026-04-08: Initial launch

2026-08-20: Payout periods now reconcile late posts automatically

Goals and CPM payouts now wait for a deep, post-period account reconciliation before they are calculated. If an eligible post is discovered after an unpaid accrual was created, trackagoat reopens the period and recalculates the earning automatically. Recorded payments remain immutable; any late data that could affect one is flagged for finance review instead of silently rewriting history.

2026-08-18: Choose when a payout structure starts earning

Assigning a payout structure now asks two questions instead of silently starting at the moment you click. Start on period picks which period earning begins on — the one in progress, or any of the next three — so moving a creator between structures no longer has to overlap. First period decides how a period already underway is treated: prorate from today, or take it whole.

For CPM the second choice is the one that matters. CPM counts the views on videos posted inside the period, so it now offers counting only videos posted from the assignment onward, rather than always counting the whole period including videos posted before the creator was on the structure.

Existing assignments are untouched and keep behaving exactly as they did. The v2 API accepts effective_at and first_period_mode on POST /payout-structures/{id}/assignments.

2026-08-18: CPM payout structures drop the unused amount field

Creating a CPM structure no longer asks for an "Amount per period" or a proration mode. Neither was ever used to calculate CPM earnings — the tiers carry the money — so the fields only invited a number that did nothing. The payment period remains, since it is the window impressions are summed over. Existing CPM structures are unaffected, and the stale flat amount they carried is no longer shown in the structures list, the structure header, or a creator's shared payouts page.

The CPM rate and cap inputs also accept decimals properly. They previously reformatted on every keystroke, so 1.50 could not be typed and any rate under $1 was unreachable.

2026-08-06: Filter Payouts by campaign

The Payouts tracker now has a Campaign filter. Selecting one updates the outstanding balance, creator table, spend charts, and CSV exports to the creators represented by that campaign, including individually added videos and nested campaigns. The selected campaign stays in the URL for bookmarkable and shareable views.

2026-08-06: View-incentive accruals resume automatically

View-threshold payout structures stopped creating new accruals after a shared scraper-freshness check was changed for conversion payouts. Video stats continued updating normally, but newly crossed milestones did not appear in Payouts. The threshold-specific freshness check has been restored; eligible missed milestones are picked up automatically by the next payout calculation.

2026-07-30: Scrollable pickers no longer overlap their buttons in Safari

In Safari, any dialog with a scrolling list — Add Creators to a payout structure, Assign Payout Structure, the add-to-campaign pickers, the calendar day view, and chart annotations — rendered the full list instead of confining it to its box once the list was long enough to scroll. The overflowing rows spilled over the buttons beneath them, so clicking Assign selected a creator instead. Chrome and Firefox were unaffected, which is why the problem looked account-specific. The list now stays inside its box and scrolls in every browser.

2026-07-29: Payouts tells you when a creator has no structure assigned

Creators who had been added, put in a campaign, and given goals were silently absent from Payouts, with nothing on the page explaining why. Earnings only accrue against an assigned payout structure, and the tracker lists creators who have earnings or payments — so an unassigned creator never appeared at all.

The Payouts page now shows a banner naming any active creators with no payout structure, with a button to assign one to all of them at once. Also fixed: analytics time-series reads were capped at 1,000 rows, which understated longer-window creator and campaign charts by as much as 11%.

2026-07-29: Shareable creator pages

Give a creator a private link where they can check their own numbers — no account, no login, no invitation.

  • A page per creator, protected by a 4-digit PIN. Create one from a creator's Info tab, choosing whether it shows Analytics, Payout accruals, or both. Analytics covers headline totals, a views-over-time chart, goal progress, and their video list; payouts covers what they've earned, what's outstanding, what you've paid, and the terms they're on.
  • Bulk creation. Select creators on the Creators list and click Shareable Pages to set up a whole cohort at once — each with their own PIN, or one PIN for the batch — then copy the results or download them as CSV.
  • Predictable links. Every page lives at /share/creator/<creator_id>, so anything holding a creator id can build the link without a lookup. The URL isn't a secret; the PIN is what gates the data. Nothing renders before the PIN is verified, wrong guesses are locked out after ten attempts, and the pages are excluded from search engines.
  • Full API support. Every creator response now carries a share_link object, and links can be created, updated, rotated, disabled, and deleted through the v2 API — including a bulk endpoint. Entrance PINs are hidden by default and only returned to an admin-scope key that asks for them explicitly. See Shareable creator pages and the Share Links API reference.

2026-07-29: Conversion payout structures are editable again

  • "Invalid request body" when editing a conversion payout structure. The structure detail page showed a Period & Amount card for conversion structures, but a conversion structure pays per event — the rates live in Criteria, and the period is set by the roll-up cadence. Nothing typed into that card could ever save. It no longer appears for conversion structures, matching how view-threshold structures already behaved. Edit the cadence and per-event rates under Criteria.
  • Deactivated conversion events no longer look like missing ones. Deleting a conversion event deactivates it rather than removing it, and deactivated events are hidden from the event picker when building a payout structure — so a project could appear to have no events while re-creating them failed with "already exists". The picker now says how many are deactivated and links to Manage events, and the API's 409 names the existing event, says whether it is deactivated, and tells you how to reactivate it.
  • A mismatched roll-up cadence returns a clear error. Sending a conversion structure whose period disagreed with its cadence through the API failed with a server error instead of a validation message.

2026-07-27: Sandbox testing, and two fixes around it

  • How to get a sandbox for API testing is now documented. API keys are scoped to an organization, not a project, so a key can reach every project in its org. To test an integration safely, create a separate org and use a key from there. See Authentication.
  • Pausing scraping now actually pauses it. Turning scraping off for an org stopped the scheduled runs, but adding a creator still triggered an immediate scrape. Adding a creator to a paused org no longer starts one.
  • Deleting a conversion that has been paid out no longer fails silently. Hard-deleting a conversion that had already produced a payout accrual returned a server error every time. It now returns a clear 409 explaining that the conversion should be voided instead — voiding reverses an unpaid accrual, and flags an already-paid one for review. The same fault also blocked deleting a project or organization containing such a conversion; that works now too.

2026-07-24: Deleting a creator works again

Removing a creator silently failed to save since the 2.0 upgrade — the button reported success but the creator reappeared on refresh. The delete referenced a field that moved during the upgrade, so it errored before saving. Fixed; deleting a creator now removes them and stops tracking their accounts as of that day.

2026-07-22: Payouts page fixes

  • Date-filtered payouts no longer hide threshold and per-conversion earnings. Narrowing the payouts tracker to a date range dropped accruals from view-threshold and every-conversion structures (which aren't tied to a calendar period), so a week could show "no outstanding payments" while money was actually owed. These now appear, filtered by the date each was earned.
  • Edit conversion events. Conversion events can now be edited from Conversions → Manage events — update an event's name, description, or default value. Changing the value doesn't alter conversions already recorded.

2026-07-21: Get notified when a tracked account goes private

When a creator sets their TikTok or Instagram account to private, we can still read their profile but can no longer track new posts or view counts. Previously this was silent — the account just appeared to stop posting.

  • Org admins now get a notification the moment a tracked account goes private, and again when it becomes public and tracking resumes.
  • Accounts carry a private state and a changelog entry records each transition.
  • Under the hood this also closed a scraping-cost leak: a private account's now-unreachable videos were being retried every cycle at real expense.

2026-07-21: API v2 now matches its documentation

Three fixes where the v2 API behaved differently from what the docs described. If you built an integration against the documented behaviour, it now works as written.

  • Creator metadata is writable again. The docs described it as writable and the field was returned in responses, but POST/PATCH /api/v2/creators silently discarded it — unknown fields are stripped, so you got a 201 and no stored value. Use it to map your own record ids onto a creator. PATCH replaces the whole object rather than merging.
  • A leading @ in a handle is now stripped. The docs said it was; v2 stored the handle verbatim, so @rachel was scraped as the literal handle @rachel and counted as a different account from rachel.
  • The daily-quota 429 now carries Retry-After. Only the per-minute limiter sent it before, so clients had to special-case which limiter fired.

2026-07-22: Pay creators for conversions

Payout structures can now pay on conversions, alongside recurring, goals, CPM and view-threshold rules.

  • Pick the events that count. Select which conversion events a structure pays for, and give each its own rate: a flat amount per conversion, or a percentage of that conversion's value.
  • Choose how often it rolls up. Pay on every conversion as it arrives, or sum a creator's conversions daily, weekly or monthly. Weekly can start on any day, so "every Tuesday" works.
  • Refunds are handled. Roll-ups wait 24 hours after a period closes, so a conversion voided in that window never becomes a payout. A conversion voided later voids its unpaid accrual; anything already paid is left alone and flagged for review rather than silently rewritten.

2026-07-22: Hashtag matching fixes & org member removal

  • Hashtags in non-Latin scripts now work. Hashtag mode could never match a tag written in Devanagari, Arabic or Hebrew: the stored tag and the caption were being cleaned by two different rules, so they never lined up. Both sides now use the same rule.
  • Punctuation in hashtags is handled predictably. A tag typed as #Black-Friday is stored as blackfriday: the form people actually post, and matches captions written either way. It no longer becomes two separate tags.
  • Removing someone from an organization works again. This had been failing since 2026-07-15 for every org, which also prevented deleting a user account.
  • Conversion event limits are enforced on reactivation. Re-enabling a deactivated conversion event while already at your plan's limit is now correctly blocked.

2026-07-21: Conversions

Trackagoat now tracks outcomes, not just output and cost. Define conversion event types per project (Signup, Purchase) and POST conversions to the v2 API attributed to a creator, an account, or a video.

  • Conversion events. Project-scoped definitions carrying a stable key, a default value, and a currency. Currency lives on the definition, so every total is well-defined. Plan limits: 3 event types per project on Free, 25 on Starter, unlimited on Ultra. Conversion volume is never capped.
  • Attribution with rollup. A conversion on a video also counts for that video's account and creator, so you can attribute at whatever precision your data supports and still report at any level. Attribute by creator_id, account_id, video_id, or platform + handle.
  • Frozen attribution. The rollup is computed at receipt time, so moving a video between accounts does not rewrite its past conversions and historical reports stay reproducible.
  • Two idempotency layers. The Idempotency-Key header replays a response for 24 hours; the external_id field dedupes permanently per project, returning the original conversion with deduped: true rather than a duplicate or an error.
  • Void, don't delete. DELETE voids by default (auditable, excluded from totals, still visible behind ?status=all), which is the right answer for a refund or chargeback. Irreversible hard deletes require an admin-scoped key.
  • Batch ingest. Up to 500 conversions per request.

See the Conversions guide and the API reference.

2026-07-20: Hashtag import mode

  • New Hashtag tracking mode. Alongside Auto and Selective, an account can now track by hashtag: define a list of hashtags, and any newly discovered video whose caption contains one of them is tracked automatically. Ideal when a creator posts both sponsored and personal content and only tagged posts should count.
  • You choose what happens to the rest. A Send non-matching videos to the Tracking Inbox option routes everything else to the Inbox for review (the default), or excludes it outright.
  • Works the same on every platform. Matching runs on the video caption for TikTok, Instagram and YouTube alike. Note that Instagram creators who put hashtags in the first comment rather than the caption won't match. Use Selective mode for those accounts.
  • Safe on missing data. Videos that arrive without a caption always go to the Inbox rather than being silently excluded.

2026-07-19: Accounts tab, durable avatars & docs refresh

  • Accounts tab on creators. Every creator now has a dedicated Accounts tab listing each platform account: platform, handle, tracking mode, followers, videos, scrape freshness, and status: with links to the account and its live profile. (This replaces the Accounts block that used to live on the Info tab.)
  • Profile pictures no longer disappear. Avatars are now stored permanently instead of relying on platform image links that expire after a few days, so creator and account profile pictures stay put. Where an image is temporarily unavailable, a clean placeholder shows instead of a blank circle.
  • Docs refresh. Guides and API reference now consistently describe how accounts sit between creators and videos across TikTok, Instagram, and YouTube.

2026-07-17: Flexible accounts & creators + Content Calendar platform filter

Building on Trackagoat 2.0, accounts and creators are now fully flexible.

  • Add accounts on their own. From the Accounts page, use Add Account to start tracking a platform account by pasting its profile URL (we detect the platform) or a handle. Attach it to an existing creator, or leave it standalone and attach it later.
  • Create a creator with no account. The Add-Creator dialog has a Name only mode to create a creator up front and add their accounts whenever you like.
  • Editable creator name. A creator's display name is now an optional override on their Info screen: leave it blank and the creator automatically shows their primary account's name and avatar. Set it to give the creator a custom name.
  • Richer Accounts block. A creator's Info → Accounts section now lists each account with its platform, handle, followers, video count, and scrape freshness, linking straight to the account.
  • Handle editing moved to the account. You now rename a handle on the Account detail page (where it belongs), not on the creator.
  • Content Calendar platform filter. Filter the calendar's posts by platform (TikTok / Instagram / YouTube).

2026-07-16: Trackagoat 2.0: Instagram Reels & YouTube Shorts tracking

Trackagoat is now multi-platform. Alongside TikTok, you can track Instagram Reels and YouTube Shorts: with the same views, engagement, posting-consistency, campaign, goal, and payout tracking you already use. Read the full announcement →

Creators now have accounts. A creator is the person; an account is one of their platform presences. A single creator can have a TikTok, an Instagram, and a YouTube account: even multiple accounts on the same platform. Your existing TikTok creators were migrated automatically: each became a creator with one TikTok account, and all of your history, videos, campaigns, goals, and payouts carried over unchanged.

  • Multi-platform tracking. Add Instagram and YouTube accounts to any creator. Views (plays on Reels), likes, comments, followers/subscribers, and posting cadence are tracked per account.
  • Aggregate + per-platform views: creator stats sum across all their accounts by default, with a platform/account switcher on every creator page to drill into one account. Analytics gains a platform filter and per-platform breakdowns.
  • Mixed campaigns. A campaign can contain videos and creators from any platform, with a per-platform breakdown.
  • Platform-scoped goals & payouts: goals and payout structures can target all platforms, one platform, or one specific account. Your existing goals and payout structures were scoped to TikTok, so their behavior is unchanged.
  • Comments & sentiment on YouTube (and TikTok as before); Instagram comments follow.
  • New account-based limits: plans now count accounts (which incur tracking cost), not creators. Creators are free; add as many as you like.

API v2. The new data shape ships as /api/v2, with accounts nested under creators, platform filters on analytics, and new accounts and content-groups resources. /api/v1 has been retired. See the API reference to migrate.

2026-07-15: Clearer permissions, organization admins can manage payouts

Permissions are now driven entirely by your organization role, and blocked actions explain themselves.

  • Organization admins can record and void payouts, and perform every admin action: across all projects in the org. Previously an internal, invisible project-level role could drift out of sync with your org role and block you even as an org admin. This is what caused the payout Mark as Paid flow to fail on its final step (in some cases silently) for admins.
  • Blocked actions now tell you why. When you don't have permission for something, you'll see a clear message about what's required (e.g. "You need to be an organization admin to do this: ask an org admin to update your role") shown as a notification, instead of a vague "Forbidden" or nothing at all.

Recording or voiding a payment requires an organization admin; viewing payouts is available to any organization member.

2026-07-14: Refreshed interface

We refreshed the app's interface with updated component styling, cleaner buttons, form fields, cards, dialogs, and focus states for a more modern, consistent look. This is a visual update only: no workflows, data, or behavior changed.

2026-07-10: Dates and counts now use your organization's timezone everywhere

Every surface that shows or counts activity by day now uses your organization's analytics timezone consistently, matching how the content calendar, Program Health, and goal tracking already worked. Previously a few places still bucketed or displayed timestamps in UTC, so an evening post (in a negative-UTC-offset timezone) could appear on the next calendar day, and per-period video counts could differ from one screen to the next.

What changed:

  • Video and campaign lists/details, the "Posted", "Created", estimated-scrape, and operational timestamps on the Videos tab, Creator details, Campaign pages, and payout screens now render in your org timezone.
  • Analytics counts: the project dashboard's period totals and daily trend, plus the aggregate API endpoints (view distribution, outliers, leaderboards, creator scatter, posting heatmap/consistency), now bucket and range posts by your org's calendar day.
  • Payout and sentiment APIs: from/to date filters on GET /api/v1/payout-payments, GET /api/v1/payout-accruals, and the sentiment endpoints now interpret bare YYYY-MM-DD dates as your org's calendar days (pass a full ISO timestamp for an exact instant).

No data changed: only how existing timestamps are grouped and displayed. If a video looked like it was posted "a day off," it will now match the day it was actually posted in your timezone.

2026-07-07: Weekly payout periods now follow calendar weeks (Mon–Sun)

Weekly payout periods are moving to true calendar weeks, Monday 00:00 → Sunday 23:59 in your organization's timezone, so they line up with Program Health, analytics, and goal tracking everywhere else in the app. Previously, some weekly structures were anchored to the weekday the structure was first created (e.g. Tuesday→Tuesday), which was internally consistent but didn't match the rest of the app.

The switch is forward-only and does not change or re-cut any historical or already-paid weeks. To keep coverage continuous through the change, the final legacy week is paid normally and a one-time short "bridge" week covers the gap up to the first calendar Monday, after which every week is Mon–Sun. Amounts for past weeks are unaffected.

2026-07-07: View incentives now show when the threshold was passed

View-incentive ("milestone") accruals have no weekly/monthly period, so they previously showed no meaningful date. They now carry a threshold-passed date: the earliest point we observed the video's views cross the payout threshold (derived from view history; falls back to when the milestone was credited if history doesn't cover the crossing). This date appears on the accrual rows in a creator's payouts dropdown and in the Mark as Paid list, as a new Threshold Passed At column in the Accruals CSV export, and on the GET /api/v1/payout-accruals response.

2026-07-07: Accruals export now includes view incentives

The Accruals CSV export was dropping view-incentive ("milestone") accruals whenever a date range was applied, so exports could show only goal-compliance accruals. View-incentive accruals are earned when a video crosses a view threshold and have no weekly/monthly period, which caused them to be filtered out by the date range. They are now included correctly. Additionally, individual accrual rows for view incentives now show the date the accrual was earned, matching goal-compliance rows.

2026-07-07: Backdate a payment when recording it

When you mark accruals as paid, the Receipt step now has a Date paid field. It defaults to today, but you can set an earlier date to record a payment that was already sent, making it easy to backfill historical payout data. The date can't be in the future. The same paid_at field is available on the POST /api/v1/payout-payments endpoint.

2026-07-07: Payout recording fix and tracking-reliability improvements

A follow-up pass to the platform audit fixed several issues:

  • Recording a payment now works reliably. A recent change had introduced a fault that caused recording a payment to fail whenever a payout method was selected. Payment recording is fully restored. (Payout amounts and history were never affected: only the act of recording a payment.)
  • Auto-disable is less trigger-happy. A temporary hiccup with our data provider during the discovery of brand-new creators could wrongly count against them and, after repeated hiccups, auto-pause a perfectly healthy creator. Those transient provider outages are now recognized as such and no longer penalize creators.
  • Paused creators keep their view counts current. Videos belonging to a creator who has been auto-paused (but not removed) now continue to update their view and like counts, so view-milestone payout progress no longer stalls while a creator is paused.
  • The public newsletter signup now always enforces a submission rate limit, even when our rate-limiting cache is unavailable.

2026-06-10: Always-accurate plan limits

The Limits & plan tiers page now reads tier values straight from the live plan configuration instead of a hand-maintained table, so it can never drift from the limits actually in force. When the team adjusts a tier, the docs update immediately. This pass also surfaced and corrected several stale values the old static table had been showing.

2026-06-10: Clearer labels across the app

A pass over the whole interface to make labels and wording clearer and more consistent. Notable renames you'll see:

  • The Tracking section (was "Primitives") groups Campaigns, Creators, and Videos.
  • Payouts (was "Payment Management") in the sidebar.
  • Tracking Gaps (was "Video Parity") in Program Health, with plain-language explanations.
  • Auto-Disabled (was "System Disabled") for creators we automatically pause after repeated failed updates.
  • Update Now / Data Freshness / Update Failures (was "Scrape …") and Find New Videos (was "Discover New Videos").
  • The creators list now shows Tracked Posts (posts in your program), and the dashboard shows Total Followers.

No functionality changed: only wording.

2026-06-10: Security & access-control hardening

Several access-control fixes following a full security review:

  • Closed a permission gap that could have let a signed-in user grant themselves access to an organization or project they weren't a member of.
  • API keys now strictly honor their scope: a read-only key can no longer create, edit, or delete payout configuration (it receives a clear "write scope required" error).
  • Locked down internal database functions and tightened tenant scoping on analytics so data can never be read across organizations.
  • Account impersonation (used only by platform support) is now verified on every request and cannot be spoofed.

2026-06-10: Photo carousels tracked correctly

Fixed a class of bugs affecting TikTok photo (carousel) posts. A regression had caused photo posts discovered since early June to be stored as regular videos, which put them on the wrong (too-frequent) scrape schedule and mislabeled them throughout the app. 411 affected posts were corrected, and the underlying causes were fixed: photo posts are now reliably classified, always get a valid /photo/ link, are no longer dropped during fallback discovery, and can't record a corrupted zero-view reading from a partial page load. Photo posts now also scrape on their intended (cost-efficient) cadence.

2026-06-10: Complete post capture, no more permanently-missed videos

Discovery now guarantees every reachable post is eventually captured, closing a class of permanent gaps.

Previously, routine discovery stopped scanning a creator's history as soon as it reached a video it already knew about. That meant if a post was ever missed: during a posting burst, a TikTok block, or before a creator's tracking start date was backdated. It became a permanent hole that no amount of waiting would fill.

Now a cost-bounded reconcile runs continuously in the background: each creator periodically gets a deep, full-history re-scan that fills any gap it finds, prioritizing creators whose captured post count is furthest below their TikTok profile count. The existing backlog of missed posts drains automatically over the first cycle. This adds only a small, capped amount of scraping work: each creator is deep-reconciled at most once per ~30 days, and creators with detected gaps jump the queue.

2026-06-10: Platform-wide reliability and data-accuracy audit

A holistic audit pass across the entire platform, focused on data completeness, accuracy, and security:

  • Scrape accuracy, failed video scrapes are no longer recorded as zero stats (previously a TikTok timeout could zero out comment/share/save counts and write a false dip into stats history). Stats history is now fully idempotent under retries.
  • Metadata no longer disappears: captions, posting dates, and thumbnails are no longer wiped when a creator's scrape falls back to the secondary data source; posting dates are also derived from the video ID when TikTok omits them.
  • Photo carousels can be added directly: /photo/ URLs now work in add-video (previously rejected).
  • Creator protection: large scrape batches are chunked so healthy creators at the tail of a batch can no longer be miscounted as failing (and eventually auto-disabled); videos of disabled creators stop consuming scrape budget.
  • Fixed dead UI: campaign Top Videos / Top Creators widgets, the Disabled Creators page, and the dashboard refresh countdown were silently showing empty states for all users.
  • Payout exports: CSV exports no longer drop the final day of the selected range.
  • Security hardening: tightened database-level access controls across more than 100 internal functions, partition tables, and event feeds, plus several authorization fixes in the API layer.

2026-06-02: Health alerts are now logged and triageable

Warning alerts from the daily and hourly health checks are now persisted to the health_alerts database table instead of existing only in email. Each alert type gets one open row that re-fires bump (with an occurrence count), and alerts auto-resolve when the underlying issue clears. A new Claude Code skill (/health-alerts) provides end-to-end triage: list open warnings, investigate root causes by type, and resolve with a note once fixed.


2026-06-02: v1 API, full write coverage

The trackagoat API now supports writes across every resource, not just payouts and annotations.

New write endpoints (all require Authorization: Bearer tga_<key> with the write scope):

  • Creators. Add (single or bulk up to 50), update, soft-delete, trigger scrape, bulk re-enable/remove
  • Videos. Add (single or bulk up to 50), update, hard-delete, trigger scrape, toggle tracking, bulk tracking operations
  • Campaigns: create, update, delete, add/remove items
  • Projects: create, update, inbox approve/exclude
  • Goals: create, update, delete
  • Organizations: create org, manage members and invitations, issue/revoke API keys
  • Payouts: receipt upload URL (structure/method/payment/accrual CRUD was already available)
  • Admin: platform-admin endpoints for creator management, limit overrides, plan tiers, user bans, scrape jobs (require admin scope)

New safeguards on all write calls:

  • Scopes, keys now have explicit read, write, and admin scopes (existing keys grandfathered to read + write)
  • Idempotency. Send Idempotency-Key on POSTs; replays return the cached response for 24 h
  • Audit log: every write is recorded in api_audit_log, visible to org admins

OpenAPI spec: GET /api/v1/openapi.json: import into Postman, Insomnia, or any OpenAPI-compatible tool.


2026-05-20: System status page

trackagoat now has a public status page at trackagoat.com/status. It shows live operational status for four core subsystems (Database, Scraping Pipeline, Background Queue, and Scraper Worker) and links out to the status pages of external dependencies (Supabase, Vercel, Apify, Google Cloud). The page auto-refreshes every 60 seconds. A live status pill also appears in the site footer.


2026-05-20: Goal data advisories

Goals now show a small amber caution icon when the displayed progress may not be final. Hover it to see an explanation. Four situations trigger the advisory:

  • Period in progress, the week or month hasn't ended yet; actual counts will likely grow.
  • Period recently closed: the period ended within the last 48 hours; late-period posts may still be processing.
  • Stats may be stale: the creator hasn't been scraped recently; views, engagement, or follower counts may undercount.
  • Goal not yet started: the goal's start date is still in the future.

The advisory is also available in the API: the advisory object is included on every goal compliance result, and a with_advisories count is added to the aggregate goal-compliance endpoint. A new GET /api/v1/projects/:id/goal-compliance endpoint returns per-goal results with full advisory data for each creator.


2026-05-19: Goals payouts now evaluate 48 hours after period close

Goal-based payout accruals are now computed roughly 48 hours after the period ends, rather than as soon as scrapers finish. This gives TikTok's index time to surface posts made in the final hours of a period so they're counted correctly.

If you previously saw goal payouts appear on Monday morning for a Sunday-night period close, expect them to appear Tuesday morning instead. The timing is automatic: no action needed on your end.


2026-05-16: Re-add a deleted creator by handle

Deleting a creator and then re-adding the same TikTok handle now reactivates the existing record (preserving history) instead of requiring manual intervention. A "Creator reactivated" confirmation appears so you know prior data was kept. Any prior auto-disable state is also cleared so scraping resumes immediately.


2026-05-16: Video tracking expiry rules

Org admins can now set an age-based rule that automatically stops tracking videos once they reach a certain age, freeing up tracked-video limit slots for newer content.

  • Org Admin → Video Expiry: new settings tab to enable the rule, set the threshold (days/weeks/months), and preview exactly how many existing videos would be expired before saving.
  • "Apply to existing videos now" toggle: expire matching videos immediately on save, or only apply the rule going forward.
  • Tracking Disabled badge (red): appears on every expired video in the project list, video detail page, and creator videos tab. Hover for a full explanation of why tracking stopped (age rule or manual action) plus admin actions.
  • Expires in Xd badge (amber): videos within 7 days of their expiry threshold show a pre-warning badge so admins can exempt important videos before they go.
  • Exempt badge (green): admins can manually re-enable any expired video and permanently exempt it from rules. The exemption can be removed at any time.
  • Bulk actions: select multiple videos in the project list to disable tracking or re-enable & exempt in one step.
  • Limit count fix: tracked-video limits now correctly exclude expired videos and non-tracked statuses (excluded, pending review). This may free up capacity you didn't know you had.

2026-05-16: System-disabled creators visible to org admins

When trackagoat auto-pauses scraping for a creator (after 5 consecutive failures), org admins can now see, understand, and act on it: without waiting for platform admin intervention.

  • "Auto-Disabled" badge appears on the creator list, creator detail header, and in Program Health: hoverable with a full explanation of why updates stopped.
  • Three reason buckets distinguish Account Deleted, Account Private, and Unreachable with tailored copy and guidance.
  • Re-enable action is available to org admins from the badge tooltip, the row actions menu, and the new Tools → Auto-Disabled dedicated page. A 24-hour per-creator cooldown prevents spam.
  • Program Health shows a new dismissible alert and a Auto-Disabled watchlist widget.
  • In-app notification goes to all org admins the moment a creator is auto-disabled.
  • Creator changelog records both the auto-disable event and every re-enable (org admin or platform admin).
  • Bulk actions: select multiple disabled creators to re-enable or remove them in one step.

2026-05-16: Edit creator TikTok handle

You can now rename a creator's TikTok handle when they re-brand or change accounts. Open any creator → Info tab → TikTok Handle card, enter the new handle, and confirm.

  • Profile data (display name, avatar, follower count, bio) is cleared and a fresh scrape is queued automatically.
  • Tracked videos, past payouts, campaign memberships, notes, and README remain attached to the same creator.
  • The rename is logged in the creator's History tab.
  • Also available via the public API: PATCH /api/v1/creators/{id} now accepts tiktok_handle.

2026-05-16: Operator email alerts

Two new automated email notifications are now active for platform operators:

  • Signup notifications: an email fires whenever a new user creates an account, including their name, email, auth provider, and running total user count.
  • Daily scrape anomaly check: runs at 08:15 UTC and emails when longer-window issues are detected: per-creator stats gaps (>3 days), freshness drift (>25% of creators stale), comment-scraping silence (>48h), stuck payout accruals, or orphaned campaign memberships. Distinct from the existing hourly alert which covers immediate job failures.
  • Daily digest: runs at 14:30 UTC (07:30 PT) and always sends a summary of the past 24h scraping activity, platform totals, and top failing creators: a green-state heartbeat for days when everything is healthy.

2026-05-13: Sentiment Radar

A new Sentiment Radar tool gives you a program-level view of comment sentiment across all your tracked videos.

  • KPI strip: total comments, % positive, % negative, and average sentiment score for the selected date range.
  • Sentiment over time chart: stacked bar chart of positive / neutral / negative volume, bucketed by day (≤14 day range) or week.
  • Top creators leaderboard: creators ranked by average sentiment score (requires ≥20 analyzed comments in range).
  • Negative-vibes alert: dismissible warning when any video has ≥40% negative comments with ≥10 analyzed.
  • Comment stream: infinite-scroll feed of all comments, filterable by sentiment tab (All / Positive / Neutral / Negative) and keyword search.
  • Campaign filter + date range: scope everything to a specific campaign and custom date window. Defaults to the last 30 days.

Find it under Tools → Sentiment Radar in the sidebar.


2026-05-13: Video Comments tab

Each video detail page now has a Comments tab showing the sampled comments for that video (up to 100 per video).

  • Sentiment analysis: every comment is scored using sentiment analysis and labelled positive, neutral, or negative. A summary breakdown appears at the top of the tab.
  • Sort options: sort by top likes, newest, or oldest.
  • Auto-collection: comments are scraped automatically on a 6-hour cycle. New videos will have comments within 6 hours of being discovered.
  • Image and emoji-only comments are excluded from sentiment scoring.

2026-04-30: Analytics section

Added a new project-level Analytics section (available in the sidebar between Tracking and Tools) with three sub-tabs:

  • Video Analytics: top-video leaderboard, posting-time heatmap (DOW × hour), view distribution histogram with percentile markers, and breakout video gallery.
  • Creator Analytics: creator leaderboard (followers, posts/week, engagement, growth), posting consistency punch card, goal compliance roll-up, and follower growth × engagement scatter chart.
  • Campaign Analytics: campaign leaderboard with prior-period delta, multi-campaign comparison overlay (up to 5), and campaign membership overlap matrix.

Nine new aggregate API endpoints at /api/v1/analytics/aggregate/* support these dashboards and are available to API key holders.


2026-04-19: Internal & public docs

Overhauled both the public docs site (/docs) and the internal admin docs (/internal-docs). New three-pane layout, syntax-highlighted code, table of contents, sectioned sidebar navigation, full API reference, feature guides, and agent documentation.


2026-04-17: Admin Control Plane

Launched the platform admin control plane at /admin. Includes Plans tab (live tier limit editing), per-org limit overrides, per-user limit overrides, audit log, creator bans, soft-delete management, and user impersonation.


2026-04-11: Multi-org support

Users can now belong to multiple organizations. Added max_orgs_per_user limit key and the org picker for users with multiple org memberships.


2026-04-11: API keys v2

Added API key visibility rules, SHA-256 hashed key storage, and one-time key reveal flow. Keys now use the tga_ prefix format.


2026-04-10: Limits & plan tiers

Introduced the three-tier plan system (Free, Starter, Ultra) with atomic enforcement via Postgres RPCs, daily usage metering for API requests and manual scrapes, OverLimitBanner, and LimitReachedModal.


2026-04-08: Initial launch

Core platform: organizations, projects, creators, videos, campaigns, goals, inbox, content calendar, BullMQ scraper on Railway, v1 API.