Publishing Frequency Tracker avatar

Publishing Frequency Tracker

Pricing

from $3.40 / 1,000 domain analyzeds

Go to Apify Store
Publishing Frequency Tracker

Publishing Frequency Tracker

Measures how much long-form work a company publishes per month and whether that rate is rising or falling. Returns a flat Clay-ready row with 30 day, 90 day and 12 month post counts, a cadence trend, format mix and byline count. Editorial output volume, not changelog monitoring.

Pricing

from $3.40 / 1,000 domain analyzeds

Rating

0.0

(0)

Developer

Mamba Labs

Mamba Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Share

๐Ÿ“ What can Publishing Frequency Tracker do?

Give it a company domain and it returns how much long-form content that company publishes and whether the rate is rising or falling: posts per month over the last 12 months, the trend against its own baseline, and the formats. One flat row per domain.

The trend is the product. A company publishing four pieces a month is unremarkable. A company that went from four to twelve in six months has a content operation outgrowing its staff.

๐Ÿ“ฆ What you getโš™๏ธ Features and integrations
๐Ÿ“ˆ cadence_trend, recent 90 days against its own baseline
๐Ÿ”ข Posts per month at 30, 90 and 365 days
๐Ÿท๏ธ Ten content formats counted inside the window
๐Ÿงพ 45 flat fields, snake_case, one row per domain
๐Ÿงญ Blog root discovery across hosts, feeds and paths
๐Ÿ›ก๏ธ Reliability guard that nulls counts it cannot trust
โฑ๏ธ Hard per-domain time budget, never runs away
โฌ‡๏ธ Export to JSON, CSV, Excel, HTML or XML

Bought by teams selling into content, SEO and demand generation, where a company outgrowing its publishing capacity is the buying signal.

๐Ÿšซ This measures editorial output volume. It is not a changelog monitor. Every existing supplier in this corner of the Store watches product changelogs and release notes, which is a different question with a different buyer. If a feed on the site turns out to be a release feed, this actor rejects it rather than counting shipped features as published articles.

๐Ÿ’ก Why use Publishing Frequency Tracker?

If you wantRead these fields
The buying signalcadence_trend, trend_pct_change
A rate you can act onavg_posts_per_month, posts_last_90d
Whether they have gone quietdays_since_last_post, most_recent_post_date
What kind of content it isformats_detected, formats_breakdown
The size of the team behind itdistinct_authors_count, authors
Where the numbers came frompublication_url, discovery_method, evidence
Whether to quote the numberdate_source_reliable, counts_are_estimate, confidence

๐Ÿ“Š The two windows, stated rather than left for you to guess

WindowSpan
recentthe last 90 days
baselinethe 275 days before that, day 91 through day 365

Both are converted to posts per month before they are compared, so the unequal window lengths do not bias the ratio.

cadence_trendMeans
acceleratingrecent rate is 25 percent or more above baseline
steadywithin 25 percent either way
decliningrecent rate is 25 percent or more below baseline
dormantnothing in 12 months, or nothing in 90 days with the last post over 180 days ago
unknownthe window could not be established, or the dates could not be trusted

trend_pct_change carries the number. It is null when the baseline is zero, because a percentage against zero is undefined, and cadence_trend carries the meaning in that case.

๐Ÿ“‹ What data can Publishing Frequency Tracker extract?

50 fields per domain, in four groups.

GroupFields
The rateposts_last_30d, posts_last_90d, posts_last_12m, posts_baseline_window, avg_posts_per_month, recent_rate_per_month, baseline_rate_per_month
The signalcadence_trend, trend_pct_change, most_recent_post_date, days_since_last_post, oldest_post_seen_date
The shape of the outputformats_detected, formats_breakdown, distinct_authors_count, authors
Where it came frompublication_url, blog_host, discovery_method, feed_url, feed_item_count, post_urls_found, posts_dated, dating_coverage, dating_sources, sitemaps_fetched, pages_fetched, pages_blocked
How much to trust itconfidence, date_source_reliable, counts_are_estimate, window_reachable, partial_result, budget_exhausted, lastmod_available, evidence, signals_fired, signals_missing

formats_detected covers blog_post, whitepaper, case_study, report, guide, podcast, video, press_release, research and news, counted only inside the 12 month window so an old archive of case studies does not describe what a company publishes now.

โš ๏ธ Read date_source_reliable and counts_are_estimate before quoting a number to anyone. When the reliability guard fires, every count is nulled and cadence_trend becomes unknown. The row still reports where the company publishes and when it last did, because those do not depend on the rate. distinct_authors_count undercounts by design: plenty of sites publish no byline, so zero means "no byline published", never "nobody writes".

๐Ÿ› ๏ธ How to measure a company's publishing frequency

  1. Open the Input tab and put a domain in domain, or a list in domains.
  2. Leave the defaults alone for a first pass. max_pages_to_date at 400 dates most publishers outright in about 15 seconds.
  3. Click Start.
  4. Read cadence_trend for the signal and avg_posts_per_month for the rate.
  5. Check date_source_reliable and counts_are_estimate before you put a number in an email.

๐Ÿงช Using it in Clay

Add an Apify enrichment column and map your domain column to domain. Every field lands as its own column.

Filter on cadence_trend = "accelerating" for companies scaling content, and on dormant with a high posts_last_12m for companies that used to publish and stopped, which is a different and often better conversation.

๐ŸŽฏ Getting a tighter number on a big archive

When every candidate post can be dated inside the page budget, the counts are a census. When a company has more posts than the budget allows, an even sample across the whole archive is dated and scaled, and counts_are_estimate is set true. Raise max_pages_to_date for a tighter number.

๐Ÿ’ต How much does it cost to track publishing frequency?

You are charged once per domain analyzed.

PlanPer domainPer 1,000 domains
Free$0.004$4.00
Bronze$0.0038$3.80
Silver$0.0036$3.60
Gold$0.0034$3.40

There is also an Actor start event (actor-start) at $0.00005, charged once per run per GB of memory.

๐Ÿ’ณ One charge per domain, whether it dated 12 posts or 400. A deep archive crawl and a small blog cost the same. Repeat lookups inside 3 days are served from cache.

Free plan: Free Apify plans get 800 results per calendar month from this actor; paid plans are not capped.

Your spending limit is honored. The run stops as soon as Apify reports that the maximum cost per run you set is reached, and the optional max_charge_usd input stops it before any charge that would cross your own cap. Every row already charged stays in the dataset, and each row lists what it was charged in billable_events_json.

โŒจ๏ธ Input

Everything is on the Input tab. The options worth explaining:

FieldTypeDefaultWhat it does
domainstringempty (the form prefills zapier.com)One domain.
domainsarray[]Batch. Takes precedence over domain.
max_pages_to_dateinteger400Post pages fetched per domain. Above this, counts are estimated from an even sample.
domain_time_budget_msinteger75000Hard per-domain ceiling.
page_concurrencyinteger8Page fetches at once within one domain.
max_sitemap_fetchesinteger18Sitemap documents per domain. Blog sections are visited first.
batchSizeinteger2Concurrent domains, 1 to 8. Multiplies against page_concurrency.
request_timeout_msinteger9000Per-request timeout.
skipCachebooleanfalseIgnore the 3 day result cache.
max_charge_usdnumberemptyOptional cap in USD for this run. The run stops before any charge that would cross it

๐Ÿ“ค Output

One flat row per domain, exportable as JSON, CSV, Excel, HTML or XML.

{
"domain": "zapier.com",
"publication_url": "https://zapier.com/blog/",
"blog_host": "zapier.com",
"discovery_method": "feed",
"posts_last_90d": 96,
"posts_last_12m": 372,
"avg_posts_per_month": 31,
"recent_rate_per_month": 32,
"baseline_rate_per_month": 30.1,
"cadence_trend": "steady",
"trend_pct_change": 6.3,
"most_recent_post_date": "2026-08-05",
"days_since_last_post": 2,
"formats_detected": ["blog_post", "guide"],
"distinct_authors_count": 24,
"date_source_reliable": true,
"counts_are_estimate": false,
"confidence": 0.9,
"evidence": ["blog root https://zapier.com/blog/ (via feed)"],
"is_summary_row": false
}

Every run emits at least one row. Rows with is_summary_row: true are notices (empty input, free tier reached, QA run), not data.

Every row also carries these fields:

FieldWhat it holds
lastmod_used_as_boundTrue when lastmod narrowed the candidate set. lastmod is never used as a publication date, only as an upper bound on one.
fetch_errorSet when the domain could not be reached or analysis threw. Null on a clean run.
elapsed_msWall clock spent on this domain.
is_summary_rowTrue on a non-result row (no input, quota exhausted, QA fast path, fallback), so a consumer can filter it out.
noticeWhy a summary row was emitted. Null on a real result.
checked_atISO 8601 timestamp of the run.
degradedTrue when the run was cut off by the hard per-domain deadline. A degraded row is not a measurement.
degradation_reasonWhy the row is degraded, or null.
row_statusOne word verdict for the row, always present: ok (the look completed and found data), no_match (the look completed and found nothing), error (the look could not complete, read error_reason), or summary (a notice row, not a result).
error_reasonWhy the row is not a clean result, in plain words. Null on a clean row. Always present as a key.

๐Ÿ’ก Tips

  • Prefer posts_last_90d and avg_posts_per_month for anything you act on. posts_last_30d is the noisiest field on a large archive.
  • When the call is close to a trend boundary, read avg_posts_per_month rather than the label.
  • evidence is quotable. It holds strings like blog root https://zapier.com/blog/ (via feed) and each of the 399 dated sample posts stands for 10.6 posts.
  • A dormant company with a big posts_last_12m used to publish and stopped. That is often a better conversation than one that never started.

โš ๏ธ Known limits

Sitemap lastmod is never used as a publication date, and that is a measured decision. Across 100 URL pairs on six sites, lastmod matched the page's own dateModified within 7 days on 95 of them, median difference 0 days, while running later than datePublished by a median of 151, 195, 776 and 1,653 days on four of the six sites. Building a cadence on it would turn a company that refreshed 200 old posts last month into a company that published 200 posts last month. Concentration heuristics do not rescue it either: three of the four badly wrong sites passed a distinct-days spread test comfortably.

Some sites reset the publication date when they refresh a post. The reliability guard catches the egregious cases and returns no cadence. On buffer.com, <time datetime> dated 70 percent of the year's output to the last 30 days against a feed showing 27 posts a month, and that domain returns no cadence rather than a confident wrong one. Milder cases read as slightly more recent output than really happened, which biases toward accelerating.

Large publishers rate limit. hubspot.com began answering 429 with a browser challenge partway through the test session, after repeated crawls from one IP. That is reported in pages_blocked with lowered confidence rather than pretending the numbers are complete. No proxy is configured by default.

A blog behind JavaScript with no sitemap and no feed is invisible. There is no headless browser here. discovery_method: none means nothing machine readable was found, not that the company does not publish.

Estimated runs vary a little between runs. When counts_are_estimate is true the numbers come from a sample, so two runs of the same domain can differ by a few posts. Two runs of savanta.com in testing returned 47 and 56 posts for the year.

Detection rates, measured live on 9 domains at defaults, 2026-08-07: publishers with a rate recovered 5 of 6, controls correctly returning nothing 3 of 3, 12 month window reachable 6 of 6. The one miss is buffer.com, refused by the reliability guard. Page dating itself, once the blog root is identified, ran at 92 to 100 percent across the sites measured.

โ“ FAQ

Why did a company I know publishes return nothing?

Either its blog is behind JavaScript with no sitemap and no feed, or the reliability guard refused the dates. discovery_method and date_source_reliable tell you which.

How does it find the blog when it is not at /blog?

Three ways, all of which were failure modes in the feasibility probe. The blog often lives on a different host from the apex and the apex sitemap never mentions it, so sitemaps are crawled at the blog host and blog path too. A homepage's only advertised feed is sometimes a changelog, so feeds are scored and changelog feeds are rejected outright. Locale-prefixed paths defeat naive clustering, so clustering skips locale segments and publication_url reports the shape, for example https://ipsos.com/*/knowledge/.

Can a deep archive crawl turn into a run timeout?

No. Every domain carries a hard wall-clock budget, 75 seconds by default. When it is nearly spent the crawl stops, the row is emitted with what was gathered, partial_result is set and confidence drops.

How fast is it?

9 to 75 seconds per domain, mean 36 across the live test. No headless browser, no proxy, no LLM.

Why is trend_pct_change null?

The baseline was zero, and a percentage against zero is undefined. cadence_trend carries the meaning instead.

๐Ÿงฉ Want other GTM data?

Mamba Labs builds custom actors for B2B go-to-market teams. The public versions of that work live here on the Store, so our users get the same tooling we build under contract.

๐Ÿ•ต๏ธ Agent Accessibility Auditor๐Ÿค– AI Tooling Detector
๐Ÿ“ก GTM Signals Aggregator๐Ÿš€ Prospect Engine
๐Ÿฆ‹ Bluesky Brand Presence Mapperโฉ Sequencer Lead Push
๐Ÿ”„ Company Change Event Feed๐Ÿ“‡ Company Contact Details Extractor
๐Ÿงญ Company Discovery List Builder๐Ÿข Company Firmographic Enricher
๐Ÿชช Company Identity Resolver๐ŸŒ Company Social Presence Mapper
๐Ÿท๏ธ Contact Classifier๐Ÿ“ˆ Influencer Change Monitor
๐Ÿ”Ž Influencer Finder๐Ÿงพ Influencer Lead List Builder
๐Ÿ‘ค Influencer Profile Scraper๐Ÿ“ฌ Domain Deliverability Checker
๐Ÿ”— Domain to LinkedIn URL Resolver๐Ÿ›’ Ecommerce Platform Profiler
โœ‰๏ธ Work Email Waterfall๐ŸŽช Event Presence Index
โš–๏ธ Expert Witness Directory๐Ÿ’ต Company Funding Record
๐Ÿ’ฐ Funding and Press Signal Scanner๐Ÿ™ GitHub Organization Signal Scanner
๐Ÿง‘โ€๐Ÿ’ผ GTM Hiring Signal Scraper๐Ÿ“‹ Job Posting Monitor
๐Ÿงฑ Tech Stack Signal Detector๐ŸŽฏ ICP Fit Scorer
๐Ÿ”‘ Job Board Keyword Signal Scanner๐Ÿ›๏ธ Legal Entity Resolver
๐Ÿ“ฐ Link in Bio Scraper and Newsletter Detector๐Ÿ’ผ LinkedIn Company Page Mapper
๐Ÿ’ฌ LinkedIn Post Tracker๐Ÿ“ข Meta Ad Library Monitor
๐Ÿ“ธ Meta Brand Presence Mapper๐Ÿ“ฎ Outbound Stack Detector
๐Ÿ“„ Page Finder and Extractor๐Ÿง‘ People Finder & Email Verifier
๐Ÿ“Œ Pinterest Brand Presence Mapper๐Ÿ† Government Contract Award Monitor
๐Ÿ“… Reporting Window Finder๐Ÿ‘ฝ Reddit Brand Presence Mapper
โญ Trustpilot Reputation Enricher๐Ÿค Influencer Talent Agency Lookup
๐Ÿ‘ฅ Team Page People Extractor๐ŸŽต TikTok Brand Presence Mapper
๐Ÿ“Š Website Traffic Rank Estimator๐Ÿ… Workplace Program Detector
โœ–๏ธ X Brand Presence Mapperโ–ถ๏ธ YouTube Channel Stats Extractor

Every actor in the suite takes a domain or a company and returns one flat row, so they stack in the same Clay table without reshaping anything.

๐Ÿ› ๏ธ Need something custom built for you or your team? Tell us what you are trying to find and we will build it. Talk to Mamba Labs.

๐Ÿ†˜ Support

Something wrong, or a blog the actor cannot find? Open an issue on the Issues tab with the domain and the row, and we will look at it.

โ„น๏ธ Sourcing and legal. Everything comes from the company's own published sitemaps, feeds and post pages, read directly over HTTP with no proxy and no browser. Author names are read from published bylines. The row describes what a company published, not what it plans to publish. You are responsible for how you use the output.

Built by Mamba Labs.