diff --git a/.claude/skills/stack127-tool-audit b/.claude/skills/stack127-tool-audit deleted file mode 120000 index 28acc8e8..00000000 --- a/.claude/skills/stack127-tool-audit +++ /dev/null @@ -1 +0,0 @@ -../../skills/stack127/tools/stack127-tool-audit \ No newline at end of file diff --git a/.claude/skills/stack127-tool-backend b/.claude/skills/stack127-tool-backend deleted file mode 120000 index fb3d1b9f..00000000 --- a/.claude/skills/stack127-tool-backend +++ /dev/null @@ -1 +0,0 @@ -../../skills/stack127/tools/stack127-tool-backend \ No newline at end of file diff --git a/.claude/skills/stack127-tool-content-integration b/.claude/skills/stack127-tool-content-integration deleted file mode 120000 index 41b46ca3..00000000 --- a/.claude/skills/stack127-tool-content-integration +++ /dev/null @@ -1 +0,0 @@ -../../skills/stack127/tools/stack127-tool-content-integration \ No newline at end of file diff --git a/.claude/skills/stack127-tool-copywriting b/.claude/skills/stack127-tool-copywriting new file mode 120000 index 00000000..994452c8 --- /dev/null +++ b/.claude/skills/stack127-tool-copywriting @@ -0,0 +1 @@ +../../skills/stack127/stack127-tool-copywriting \ No newline at end of file diff --git a/.claude/skills/stack127-tool-frontend b/.claude/skills/stack127-tool-frontend deleted file mode 120000 index 1a17718e..00000000 --- a/.claude/skills/stack127-tool-frontend +++ /dev/null @@ -1 +0,0 @@ -../../skills/stack127/tools/stack127-tool-frontend \ No newline at end of file diff --git a/.claude/skills/stack127-tool-interface-design b/.claude/skills/stack127-tool-interface-design deleted file mode 120000 index d8d897b9..00000000 --- a/.claude/skills/stack127-tool-interface-design +++ /dev/null @@ -1 +0,0 @@ -../../skills/stack127/tools/stack127-tool-interface-design \ No newline at end of file diff --git a/.claude/skills/stack127-tool-interface-plan b/.claude/skills/stack127-tool-interface-plan deleted file mode 120000 index 034433cd..00000000 --- a/.claude/skills/stack127-tool-interface-plan +++ /dev/null @@ -1 +0,0 @@ -../../skills/stack127/tools/stack127-tool-interface-plan \ No newline at end of file diff --git a/.claude/skills/stack127-tool-orchestrator b/.claude/skills/stack127-tool-orchestrator deleted file mode 120000 index c95f7ff3..00000000 --- a/.claude/skills/stack127-tool-orchestrator +++ /dev/null @@ -1 +0,0 @@ -../../skills/stack127/tools/stack127-tool-orchestrator \ No newline at end of file diff --git a/.claude/skills/stack127-tool-page b/.claude/skills/stack127-tool-page new file mode 120000 index 00000000..90912ce3 --- /dev/null +++ b/.claude/skills/stack127-tool-page @@ -0,0 +1 @@ +../../skills/stack127/stack127-tool-page \ No newline at end of file diff --git a/.claude/skills/stack127-tool-product-plan b/.claude/skills/stack127-tool-product-plan deleted file mode 120000 index 144d3d01..00000000 --- a/.claude/skills/stack127-tool-product-plan +++ /dev/null @@ -1 +0,0 @@ -../../skills/stack127/tools/stack127-tool-product-plan \ No newline at end of file diff --git a/.claude/skills/stack127-tool-research b/.claude/skills/stack127-tool-research deleted file mode 120000 index 515e671f..00000000 --- a/.claude/skills/stack127-tool-research +++ /dev/null @@ -1 +0,0 @@ -../../skills/stack127/tools/stack127-tool-research \ No newline at end of file diff --git a/.claude/skills/stack127-tool-writing b/.claude/skills/stack127-tool-writing deleted file mode 120000 index 66c4badf..00000000 --- a/.claude/skills/stack127-tool-writing +++ /dev/null @@ -1 +0,0 @@ -../../skills/stack127/tools/stack127-tool-writing \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md index 5fe946d9..96a03eee 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -118,9 +118,8 @@ Read `stack127_docs/quality-workflow.md`. ## Skills - General page work: `skills/stack127/page-build/SKILL.md`. -- Tool pipeline: `stack127_docs/tool-pipeline.md` and skills under `skills/stack127/tools/`. -- Existing tool review: `skills/stack127/tools/stack127-tool-audit/SKILL.md`. -- Tool page copy, including rewrites of live pages: `skills/stack127/tools/stack127-tool-writing/SKILL.md`, with `stack127_docs/writing-style.md` and `stack127_docs/shared-ui.md`. Use these repo files instead of any personal or synced copy skill. +- Tool pages, new or reworked: `skills/stack127/stack127-tool-page/SKILL.md`. One tool at a time, with the owner: the plan and the copy each wait for their yes. +- Tool page and tool catalog copy: `skills/stack127/stack127-tool-copywriting/SKILL.md`, with `stack127_docs/writing-style.md`. Use these repo files instead of any personal or synced copy skill. - Directory page copy, including rewrites of live pages: `skills/stack127/stack127-directory-writing/SKILL.md`. - Production release: `skills/stack127/stack127-release-e2e/SKILL.md`. - Self-host app work: skills under `skills/self-host-apps/`. diff --git a/app/(site)/(catalogs)/[slug]/content/index.ts b/app/(site)/(catalogs)/[slug]/content/index.ts index 3c37f306..7a152ff2 100644 --- a/app/(site)/(catalogs)/[slug]/content/index.ts +++ b/app/(site)/(catalogs)/[slug]/content/index.ts @@ -8,6 +8,8 @@ import HostingCloudToolsIntro from "./hosting-cloud-tools/intro.mdx"; import KdpToolsArticle from "./kdp-tools/article.mdx"; import KdpToolsIntro from "./kdp-tools/intro.mdx"; import ProductivityToolsIntro from "./productivity-tools/intro.mdx"; +import PublisherToolsArticle from "./publisher-tools/article.mdx"; +import PublisherToolsIntro from "./publisher-tools/intro.mdx"; import SaasToolsArticle from "./saas-tools/article.mdx"; import SaasToolsIntro from "./saas-tools/intro.mdx"; import StorageToolsArticle from "./storage-tools/article.mdx"; @@ -21,6 +23,7 @@ export const catalogContent: RecordAd placement, other ad partners, and the contract.

}, ]} /> + +
…
` }} + > + +
); } diff --git a/app/(site)/(components-ui)/components-ui/examples/tab-row-demo.tsx b/app/(site)/(components-ui)/components-ui/examples/tab-row-demo.tsx new file mode 100644 index 00000000..2ff2abf8 --- /dev/null +++ b/app/(site)/(components-ui)/components-ui/examples/tab-row-demo.tsx @@ -0,0 +1,21 @@ +"use client"; + +import { useId, useState } from "react"; +import { UiTabRow, uiTabPanelProps } from "@/app/ui/tabs"; + +const tabs = [ + { id: "revenue", title: "Revenue" }, + { id: "cpm", title: "CPM to RPM" }, + { id: "rpm", title: "Find RPM" }, +]; + +export function TabRowDemo() { + const panelId = useId(); + const [tab, setTab] = useState("revenue"); + return ( +
+ +

The {tabs.find((item) => item.id === tab)?.title} inputs go here.

+
+ ); +} diff --git a/app/(site)/(components-ui)/components-ui/sections.ts b/app/(site)/(components-ui)/components-ui/sections.ts index e2466335..a6b945ee 100644 --- a/app/(site)/(components-ui)/components-ui/sections.ts +++ b/app/(site)/(components-ui)/components-ui/sections.ts @@ -136,7 +136,7 @@ export const gallerySections: GallerySection[] = [ label: "Navigation", description: "Breadcrumbs above page titles, page links for long lists, and sidebar link lists.", icon: Signpost, - components: ["Breadcrumbs", "Pagination", "SidebarList", "UiTabs"], + components: ["Breadcrumbs", "Pagination", "SidebarList", "UiTabs", "UiTabRow"], }, { slug: "page-layout", diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/adapex/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/adapex/article.mdx index b98f6b76..64703df8 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/adapex/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/adapex/article.mdx @@ -1,25 +1,19 @@ ## Who is Adapex a fit for? -A publisher who already sells ads through Google and wants a team to run the setup. If you use AdSense, Ad Exchange, or Prebid today, Adapex can take that over, and you keep your own Google Ad Manager account. +An established site that already earns from AdSense, Ad Exchange, or Prebid and wants more from it without hiring an ad operations person. Adapex adds itself to that setup. -If you're just starting out, [Google AdSense](/ad-networks/google-adsense) has no traffic minimum and you can set it up yourself. +A new blog without Google Ad Manager is a weak fit. Start with [Google AdSense](/ad-networks/google-adsense), then come back once ad revenue is worth managing. -## What does onboarding through MCM mean? +## What does joining through MCM mean? -MCM is Google's way of letting a partner manage ads for another publisher. Your Ad Manager account stays yours, and Adapex works with it under that link. - -## Can you try Adapex without a long contract? - -Yes. Adapex says no long-term contract is needed. It offers better terms on longer contracts, so ask what you'd give up by staying short. +MCM is Google's way of letting a partner sell ads for your site. Your Ad Manager account stays yours, and Google reviews the link before ads run. ## How long will you wait for your money? -About two months. On Net 60, each month's earnings arrive 60 days after the month ends. [Raptive](/ad-networks/raptive) pays on Net 45 and [Media.net](/ad-networks/media-net) on Net 30, so plan for a longer gap if you switch from a faster payer. +About two months from the end of each month. If you're moving from a Net 30 network such as [Media.net](/ad-networks/media-net), plan for a gap in cash flow while the first payments come through. ## What should you ask Adapex before you sign? -Ask for your share, the payment minimum, and whether Adapex must be your only ad partner. None of these are public. If you're offered a longer contract, get the better share or features it adds in writing. - -## How can you check if a site uses Adapex? - -Look for Adapex in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +1. What share of ad revenue do you keep? +2. What's the payment minimum? +3. What does a longer contract add, and what notice ends it? diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/adapex/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/adapex/intro.mdx index 45c9ae99..fcd9c586 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/adapex/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/adapex/intro.mdx @@ -1 +1 @@ -Adapex is a managed ad service that runs publishers' ads through Google Ad Manager. It suits sites already on AdSense, Ad Exchange, or Prebid that want a team to manage them. +Adapex is for mid-sized publishers who already sell ads and want a team to squeeze more out of that setup. It plugs into your existing AdSense, Ad Exchange, or Prebid through Google Ad Manager, so you don't start from zero. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/adapex/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/adapex/joining.mdx index 499da185..0578b826 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/adapex/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/adapex/joining.mdx @@ -1,3 +1 @@ -Adapex doesn't publish a traffic minimum, site rules, or the regions it accepts. You apply through the contact form on its site. - -If you already run AdSense, Ad Exchange, or Prebid, Adapex can bring that setup in. Onboarding goes through Google Ad Manager's Multiple Customer Management (MCM). +Apply through the [Adapex contact form](https://adapex.io/get-in-touch/). Its questions about revenue, pageviews, and US traffic help it judge fit. Because Adapex joins through Google's MCM, Google also reviews the link before ads run. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/adapex/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/adapex/pay.mdx index 479ef08a..37389f4c 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/adapex/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/adapex/pay.mdx @@ -1,3 +1,3 @@ ## How does Adapex pay? -Adapex pays on Net 60 terms, so each month's earnings arrive 60 days after that month ends. Its share, payment minimum, payment methods, and currency are not public. +Monthly, on Net 60 terms, through the payment method you set up with Adapex. Its share and payment minimum aren't published, so ask for both in writing before you sign. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/adapex/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/adapex/rules.mdx index 6803a0a6..93d51e4a 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/adapex/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/adapex/rules.mdx @@ -1,5 +1,5 @@ ## What rules does Adapex set? -Adapex doesn't require a long-term contract. A longer contract can get you a better share or extra features. +No long-term contract is needed to start, so you can test it. Its FAQ says a longer term can bring a better revenue share and earlier access to new features. -You can block ad categories, advertisers, and domains, and set price floors. Whether Adapex must be your only ad partner, and how much notice you give to leave, are not public. +You can block ads by category, advertiser, or domain, and Adapex supports dynamic and rule-based price floors. Ask how much notice you'd give to leave. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/adapex/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/adapex/service.mdx index 360d85a6..91f57092 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/adapex/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/adapex/service.mdx @@ -1,3 +1,3 @@ ## What does Adapex do for you? -You get a dashboard that reports revenue and traffic close to real time, split by country and device. You keep your own Google Ad Manager account. +A team runs and tunes your ad setup, and you keep your own Google Ad Manager account. Reporting is near real time through its dashboard, with detailed breakdowns. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/aditude/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/aditude/article.mdx index 8f9332b7..37664d97 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/aditude/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/aditude/article.mdx @@ -1,21 +1,20 @@ -## Who is Aditude for? +## Who is Aditude a fit for? -Aditude works with web and app publishers on their ad technology. It doesn't say who qualifies, so the only way to know is to ask its team. +Larger publishers with real ad operations needs, such as a gaming site, a media group, or an app with many daily users. You'll get the most from it if someone on your side can judge a technical setup. -## What should you ask Aditude before you sign? +A small blog looking for a quick ad tag isn't the target. [Google AdSense](/ad-networks/google-adsense) is the simpler start. -Aditude publishes no publisher terms, so get these answers in writing: +## What do publishers say about Aditude? -1. What share of ad revenue do you keep? -2. When are you paid, and what's the minimum? -3. Must Aditude be your only ad partner? -4. Who decides where ads go on your pages? -5. How much notice do you need to give to leave? +Independent reports are thin. One operator of a free design app with about 1.1 million monthly users [wrote on Reddit](https://www.reddit.com/r/adops/comments/1ozpww8) that they started with Aditude and later tested other partners after problems with ad placement. That's one account, not a pattern. -## What if you want public terms before you talk to anyone? +## What should you ask in the demo? -Pick a network that publishes its rules. [Google AdSense](/ad-networks/google-adsense) has no traffic minimum. [Raptive](/ad-networks/raptive) and [Mediavine](/ad-networks/mediavine) publish their share and pay day. [Ezoic](/ad-networks/ezoic) publishes its share in its terms. +1. What share of ad revenue do you keep, and when are you paid? +2. Must Aditude be your only ad partner? +3. Who decides where ads go on your pages? +4. How much notice ends the contract? -## How can you check if a site uses Aditude? +## Which networks publish their terms instead? -Look for Aditude in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +[Raptive](/ad-networks/raptive) and [Mediavine](/ad-networks/mediavine) publish their share and pay day. [Ezoic](/ad-networks/ezoic) puts its share in its legal terms. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/aditude/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/aditude/intro.mdx index 7fb90bd2..656b5d08 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/aditude/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/aditude/intro.mdx @@ -1 +1 @@ -Aditude is an ad technology company that builds and runs ad setups for web and app publishers. Its joining rules and terms are not public, so you'll need to talk to its team. +Aditude builds and runs ad technology for larger web and app publishers, the kind with gaming, media, or audio audiences and their own ad questions. You start with a sales demo, so it suits teams that can weigh a custom setup. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/aditude/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/aditude/joining.mdx index cf25c6e0..f3a0fb0b 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/aditude/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/aditude/joining.mdx @@ -1 +1,3 @@ -Aditude doesn't publish a traffic minimum, site rules, accepted regions, or how to apply. Contact its team to ask whether your site fits. +There's no sign-up form. You [contact Aditude](https://www.aditude.com/contact) and book a demo, and the team decides whether your site fits. + +Its [case studies](https://www.aditude.com/case-studies) show the publishers it works with: gaming and esports media such as Dexerto, digital media, audio, and apps. If your site looks like those, a demo is worth asking for. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/aditude/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/aditude/pay.mdx index 2b2af237..bc06867e 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/aditude/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/aditude/pay.mdx @@ -1,3 +1,3 @@ ## How does Aditude pay? -Not public. Aditude doesn't publish its share, when it pays, the payment minimum, methods, or currency. +Aditude agrees pay terms with each publisher during the sales process. Ask for your share, payment timing, and minimum in writing. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/aditude/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/aditude/rules.mdx index 52ebf01a..f092e03c 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/aditude/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/aditude/rules.mdx @@ -1,3 +1,3 @@ ## What rules does Aditude set? -Not public. The terms on Aditude's site cover use of its website, not a publisher agreement. Ask about exclusivity, ad placement, content rules, and notice to leave before you sign. +Aditude has no public publisher agreement. The terms on its site cover use of the website only. Ask whether it must be your only ad partner, who decides where ads go, and how much notice ends the deal. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/aditude/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/aditude/service.mdx index 11633a6e..61b45e7e 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/aditude/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/aditude/service.mdx @@ -1,3 +1,3 @@ ## What does Aditude do for you? -Aditude publishes guides on ad technology for publishers. Its dashboard, reporting, and support terms are not public. +Aditude runs the ad technology for web and app inventory, with support tailored to each publisher. Its Dexerto case study reports a 15% revenue lift against the earlier setup. That's Aditude's own figure, without a traffic or revenue baseline. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/article.mdx index ec83e790..94e0e90b 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/article.mdx @@ -1,27 +1,13 @@ ## Who is Adnimation a fit for? -Sites with steady traffic that want display, video, and native ads run for them. Adnimation asks for substantial traffic but doesn't give a number, so contact its team if you're unsure. +Original-content sites with a large audience: news, automotive, and other niches Adnimation names among its customers. Most of its customers have been US-based, including sites in other languages that serve US readers. -It's not a fit for gambling, porn, or drug sites. Those are restricted. +## Should a small site try MAP? -## Is Adnimation a fit for a small site? +It's the route meant for you. MAP has no pageview floor, so a smaller site can apply and get reviewed. Its terms differ from the managed service, so don't count on Net 35 or the full team. -Probably not the managed service. Adnimation's MAP product has no pageview minimum, but it's a separate program with its own terms. Don't assume the managed service's pay terms apply to MAP. - -For a small site, [Google AdSense](/ad-networks/google-adsense) has no traffic minimum, and [Journey by Mediavine](/ad-networks/journey-by-mediavine) starts at 1,000 premium sessions a month. +If MAP says no, [Google AdSense](/ad-networks/google-adsense) has no traffic minimum. ## How fast does Adnimation pay? -Faster than many managed services. Net 35 means each month's money arrives about five weeks after it ends. Many networks on this list pay on Net 60, such as [Monumetric](/ad-networks/monumetric) and [Playwire](/ad-networks/playwire). - -## Can you leave Adnimation? - -Yes. There's no lock-in contract, but you need to give notice. Ask how much before you sign, since it isn't public. - -## How quickly will you get help? - -Adnimation says it replies in under two hours on average. You can reach it by email, phone, WhatsApp, Telegram, or Skype, which helps if something breaks on a busy day. - -## How can you check if a site uses Adnimation? - -Look for Adnimation in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +Faster than many managed services. Net 35 lands each month's money about five weeks after it ends, where [Monumetric](/ad-networks/monumetric) and [Playwire](/ad-networks/playwire) use Net 60. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/intro.mdx index 2120ab7b..fe2e7438 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/intro.mdx @@ -1 +1 @@ -Adnimation is a managed ad service for publishers with steady traffic. It runs display, video, and native ads for you. +Adnimation runs display, video, and native ads for established websites, apps, and streaming channels. Smaller sites have a separate route, its self-serve MAP program, so check which one fits you before you apply. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/joining.mdx index 394d0250..17a06ffe 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/joining.mdx @@ -1,5 +1,3 @@ -Adnimation asks for substantial traffic but doesn't publish a number. It reviews each site, and you apply by contacting its team. It doesn't say which regions it accepts. +Pick your route first. The managed service is for large sites, and the visitor range in the row comes from an older interview with Adnimation's co-founder, a picture of its customers rather than a cutoff. Smaller sites apply to the [MAP program](https://www.adnimation.com/map/), which still reviews every site. -Sites with gambling, porn, or drug content are restricted. - -Adnimation's separate MAP product says it has no pageview minimum. That's a different program from the managed service on this page. +Both start on the [get started page](https://www.adnimation.com/get-started/). diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/pay.mdx index 80342fd2..daab1ffe 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/pay.mdx @@ -1,5 +1,3 @@ ## How does Adnimation pay? -Adnimation pays monthly by direct bank payment, on Net 35 terms, and it may accept PayPal. It works on a revenue share, but the rate is not public. The payment minimum and currency are not public either. - -The MAP program has its own payment terms, which don't apply to the managed service. +These terms are for the managed service. MAP has its own payment terms, so read them separately before you compare. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/rules.mdx index 758723d0..90db21e0 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/rules.mdx @@ -1,5 +1,5 @@ ## What rules does Adnimation set? -There's no lock-in contract, but you have to give notice to leave. How much notice is not public. +There's no lock-in contract, but you give notice to leave. Ask how much before you sign. -You can ask for changes to where ads go on your pages. Adnimation doesn't publish a rule that it must be your only ad partner. +You can ask for changes to where ads go, and your own direct ad deals can keep running. Ask whether other ad networks can stay on the site. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/service.mdx index 72c475c0..b9332256 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/adnimation/service.mdx @@ -1,5 +1,3 @@ ## What does Adnimation do for you? -Your dashboard shows gross and net earnings. Adnimation runs display, header bidding, video, CTV and OTT, app, and native or recommendation ads, with lazy loading and ad refresh. - -Support is by email, phone, WhatsApp, Telegram, and Skype. Adnimation says it replies in under two hours on average. +Adnimation runs display, header bidding, video, CTV and OTT, app, and native ads, with lazy loading and ad refresh. Your dashboard shows gross and net earnings. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/article.mdx index bf7a48a8..bf141588 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/article.mdx @@ -1,23 +1,11 @@ -## Who is AdPushup for? +## Who is AdPushup a fit for? -Publishers who want help managing ad placements and price floors, with real-time reports. AdPushup says it has no pageview minimum, but it looks for about $3,000 a month in ad revenue. Submit your site and see what its review says. +An established content site, such as a tech, media, or consumer blog, that already earns from display ads and wants managed testing. If your ad revenue is still small, the work AdPushup does has little to improve. [Google AdSense](/ad-networks/google-adsense) is the simpler start. ## Are AdPushup's public terms current? -The terms AdPushup links to were last revised in April 2021. They don't set your share. That comes from a separate Publisher Agreement, so read the one you're offered and go by that. +They were last revised in April 2021, and AdPushup still links them. Your share and any newer terms come from the Publisher Agreement you're offered. Read that one before you sign. -## What share do you keep? +## What could get your account in trouble? -It's set in your Publisher Agreement, not in the public terms. Ask AdPushup to show the rate in writing, along with the $50 minimum and Net 45 timing, before you sign. - -## What could get your AdPushup account in trouble? - -Invalid traffic. The terms ban it along with illegal, adult, hateful, fraudulent, and infringing content. If you buy traffic or run click schemes, expect problems with AdPushup and with most other networks. - -## What should you ask before you sign? - -Ask whether AdPushup must be your only ad partner and how much notice you need to leave. Neither is in its current public pages. - -## How can you check if a site uses AdPushup? - -Look for AdPushup in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +Invalid traffic, such as bought visits or click schemes. The terms ban it, and so do most other networks. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/intro.mdx index 944f3f90..3226b22f 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/intro.mdx @@ -1 +1 @@ -AdPushup is an ad revenue platform that helps publishers manage ad placements and price floors. You submit your site for review to get started. +AdPushup is for publishers who already earn real money from display ads and want a team to test layouts, run header bidding, and tune price floors. It reviews your site first, so it isn't a first ad network. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/joining.mdx index 39361efe..450f15b7 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/joining.mdx @@ -1,3 +1,3 @@ -AdPushup looks at your ad revenue, not your pageviews. It doesn't publish accepted regions or how long review takes. You submit your site on its onboarding page, and its team approves or rejects it. +Submit your site on the [AdPushup get started page](https://www.adpushup.com/publisher/get-started/), and its team approves or rejects it. -Its terms ban illegal, adult, hateful, fraudulent, and infringing content, plus invalid traffic. Once approved, you install AdPushup's code on your site. +AdPushup cares more about your ad revenue than your pageviews. The revenue figure comes from its own [blog post on small publishers](https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/), and the sign-up page doesn't repeat it, so treat it as a guide, not a rule. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/pay.mdx index c357ec3a..0f2f2c61 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/pay.mdx @@ -1,5 +1,3 @@ ## How does AdPushup pay? -AdPushup's public terms, last revised in April 2021, set the minimum and timing. They leave your share to a separate Publisher Agreement, so the rate you get is the one written there. - -You can be paid by direct deposit, wire transfer, or PayPal. The currency is not public. +The payment minimum and pay day come from AdPushup's public terms, last revised in April 2021. Your share isn't in those terms. It's set in a separate Publisher Agreement, so the rate and timing written there are the ones that count. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/rules.mdx index 32a07d22..ef118317 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/rules.mdx @@ -1,3 +1,3 @@ ## What rules does AdPushup set? -The terms ban invalid traffic and illegal, adult, hateful, fraudulent, and infringing content. Rules on exclusivity, ad placement, contract length, and notice are not public. +The terms ban invalid traffic and illegal, adult, hateful, fraudulent, and infringing content. Ask whether AdPushup must be the only partner in each ad slot, and how much notice ends the deal. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/service.mdx index a37d285e..1419977c 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/adpushup/service.mdx @@ -1,3 +1,3 @@ ## What does AdPushup do for you? -You get a custom dashboard with real-time reports. You can control ad placements and price floors, and its team supports you. +AdPushup tests ad layouts, runs header bidding, and manages price floors on top of the demand you already have. You get a dashboard with real-time reports and a support team. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/article.mdx index b748b97c..b814fca0 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/article.mdx @@ -1,25 +1,17 @@ ## Who is APS a fit for? -Web publishers who already run Google Ad Manager and represent their own sites. UAM, its Unified Ad Marketplace, is built for them. APS says it works with publishers worldwide. +Established web publishers who run Google Ad Manager and header bidding, such as news and large content sites, and want more buyers competing. APS adds demand. It doesn't replace your main ad network. -It's not a starting point for a new site. UAM is invitation only, with no public form. If you don't use Ad Manager yet, start with [Google AdSense](/ad-networks/google-adsense) or a managed network. +If you don't use Ad Manager yet, start with [Google AdSense](/ad-networks/google-adsense) or a managed network that runs Ad Manager for you. -## How do you get access to APS? +## How do you get a UAM invite? -Contact APS and ask. There's no public application or traffic rule, so have your Ad Manager setup and current header bidding partners ready to describe. - -## Can you run APS with another ad network? - -Yes, for UAM. It's built to run next to your other header bidding partners, and its code can sit outside your wrapper. You don't have to drop anyone. +Ask APS through the UAM page, and have your Ad Manager setup and current bidders ready to describe. Replies can be slow. One publisher reporting about 45 million monthly US pageviews [said on Reddit in 2022](https://www.reddit.com/r/adops/comments/v0ec6t) they'd heard nothing after about three weeks. ## What does the UAM fee mean for you? -APS takes 10% out of each bid before the auction runs. So the bids that compete for your ad space are already net of it. Compare final earnings, not bid prices, when you test it. - -## When does APS pay? - -Once a month, on Net 60, with a $5 minimum. The low minimum means even small UAM earnings get paid out. +The fee comes out of each bid before the auction. The bids competing for your ad space are already net of it. Compare final earnings, not bid prices, when you test UAM. -## How can you check if a site uses Amazon Publisher Services? +## Does the low minimum matter? -Look for Amazon Publisher Services in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +Yes for a test. Even a small first month of UAM earnings gets paid out instead of rolling over. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/intro.mdx index 62eeefaf..d9b239d2 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/intro.mdx @@ -1 +1 @@ -Amazon Publisher Services (APS) sells publishers' ad space to Amazon and other buyers. Its Unified Ad Marketplace is invitation only and suits sites that already run Google Ad Manager. +Amazon Publisher Services (APS) adds Amazon's ad demand, plus other buyers, to sites that already run Google Ad Manager. Its Unified Ad Marketplace is invitation only, so it suits established publishers adding one more bidder, not new sites. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/joining.mdx index 885afda5..4ca9f3b0 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/joining.mdx @@ -1,3 +1 @@ -The Unified Ad Marketplace (UAM) is invitation only. It's for web publishers who represent their own sites directly and use Google Ad Manager. APS says it works with publishers worldwide. - -There's no public traffic minimum or application form. Contact APS to ask for access. These rules are for UAM, not every APS product. +Ask for an invite on the [Unified Ad Marketplace (UAM) page](https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html). You must control the site's ad space yourself, so a reseller can't sign up for someone else's site. These rules are for UAM, not every APS product. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/pay.mdx index 7b668a77..10f5b302 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/pay.mdx @@ -1,5 +1,3 @@ ## How does Amazon Publisher Services pay? -UAM takes a 10% fee from bid prices before the auction runs. Your UAM earnings come in one monthly payment, on Net 60 terms. - -Payment methods and currency are not public. +Your UAM earnings come in one monthly payment. APS's 2023 UAM FAQ set the fee at 10% of each bid, taken before the auction runs. The current product page doesn't repeat the rate, so confirm it in your agreement. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/rules.mdx index 4ba35433..f4ee84a3 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/rules.mdx @@ -1,3 +1,3 @@ ## What rules does Amazon Publisher Services set? -UAM can run alongside your other header bidding, and its code can sit outside your wrapper. Exclusivity, content rules, contract length, and notice are not public. +UAM runs alongside your other header bidding, and its code can sit outside your wrapper. You don't have to drop another partner to use it. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/service.mdx index 5901d3de..9137f55b 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/amazon-publisher-services/service.mdx @@ -1,3 +1,3 @@ ## What does Amazon Publisher Services do for you? -Not public. The UAM documents don't describe a dashboard, reporting, or support. +UAM brings Amazon's own buyers and other bidders into your auction through one connection, run on Amazon's servers. You keep running your own Google Ad Manager setup. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/article.mdx index ab84566b..fa3e3e54 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/article.mdx @@ -1,22 +1,12 @@ -## Who is AnyManager for? +## Who is AnyManager a fit for? -Web and app publishers who want header bidding, price tuning, and analytics in one platform. AnyMind doesn't publish who qualifies, so contact its team. +Web and app publishers in Asia, or with big Asian audiences, who want one partner for demand and analytics. Groups with several sites or apps get the most from that. -## How does AnyMind set your share? - -You agree on a fixed share before you start. AnyMind doesn't publish it, so ask for it in writing. +A small blog that wants to sign up today and see public pay terms won't find them here. [Google AdSense](/ad-networks/google-adsense) and [Ezoic](/ad-networks/ezoic) publish their share. ## What should you ask AnyMind before you sign? 1. What share do you keep, and is it the same for every ad format? 2. When are you paid, and what's the minimum? 3. Must AnyManager be your only ad partner? -4. How much notice do you need to give to leave? - -## What if you want public terms first? - -[Google AdSense](/ad-networks/google-adsense) has no traffic minimum and publishes its share. [Ezoic](/ad-networks/ezoic) publishes a minimum share in its terms. [Sovrn](/ad-networks/sovrn) publishes its traffic bar and a $25 payment minimum. - -## How can you check if a site uses AnyManager? - -Look for AnyManager in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +4. How much notice ends the contract? diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/intro.mdx index ffef3327..8fb7c813 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/intro.mdx @@ -1 +1 @@ -AnyManager is AnyMind's monetization platform for web and app publishers. Its joining rules and rates are not public. +AnyManager is AnyMind's ad platform for web and app publishers, strongest in Asia, with publisher case studies from Vietnam, Thailand, and Japan. It's sold through sales conversations, so it suits publishers with real traffic who want demand, video, and app ads handled in one place. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/joining.mdx index fc176893..05b6db7a 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/joining.mdx @@ -1 +1,3 @@ -AnyMind doesn't publish a traffic minimum, site rules, accepted regions, or how to apply. +There's no sign-up form. You [contact AnyMind](https://anymindgroup.com/contact/), and terms are agreed per publisher. Onboarding means adding its web tag or app SDK. + +The [publisher case studies](https://anymindgroup.com/case-study/?business=publishergrowth&pa=2) show news, media, and app publishers in Asia. AnyMind serves other regions too, but that's where its public examples are. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/pay.mdx index d36eb128..55926fda 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/pay.mdx @@ -1,3 +1,3 @@ ## How does AnyManager pay? -AnyMind pays publishers a fixed share agreed before you start. The share itself is not public, and neither are payment timing, the minimum, methods, or currency. +AnyMind agrees a fixed share with each publisher before you start. Payment timing, the minimum, and methods are set in your contract, so ask for them in writing. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/rules.mdx index dde9e59e..8eda003c 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/rules.mdx @@ -1,3 +1,3 @@ ## What rules does AnyManager set? -Not public. Exclusivity, ad placement, content rules, contract length, and notice aren't on AnyMind's public pages. +They're in each publisher's contract. Ask whether AnyManager must be your only ad partner, who controls ad placement, and how much notice ends the deal. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/service.mdx index 74c7607a..c35af8c8 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/anymind-anymanager/service.mdx @@ -1,3 +1,3 @@ ## What does AnyManager do for you? -AnyManager offers header bidding, automatic price tuning, analytics, and tools for viewability and brand safety. Its dashboard and support levels are not public. +AnyManager connects you to more than 150 ad partners, with header bidding, automatic price tuning, video, private deals, and an app SDK. It adds analytics and tools for viewability and brand safety. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/article.mdx index a2c1079e..1c6baae6 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/article.mdx @@ -1,23 +1,21 @@ -## Who is Carbon Ads for? +## Who is Carbon Ads a fit for? -Sites that want one ad built to match their design, instead of standard banner slots. Carbon Ads builds each unit to fit the publisher's site. BuySellAds reviews your traffic, how well its ads fit your readers, and whether the site is kept up. Demand is strongest for developer and design sites. +Sites about software development, web design, DevOps, or developer tools, read mostly in English. If you want one tidy ad and your readers would leave over a cluttered page, Carbon fits. -## What's the difference between BuySellAds and Carbon Ads? - -BuySellAds is the company. Carbon Ads is one of its ad programs for publishers. +A general lifestyle blog, or a site that earns well from several ad networks today, is a poor match. Carbon replaces all of them. -## How do you add Carbon Ads to your site? +## Can you run Carbon with AdSense or another network? -Through the Carbon tag or its API. The API route suits you if you want to control exactly how the ad is drawn on your page. +No. Carbon's exclusivity covers the whole site, not one ad slot. Compare what Carbon might pay against everything your current ads earn before you switch. -## What should you ask before you sign? +## What's the difference between BuySellAds and Carbon Ads? -Your share, since it isn't public. Ask too how much notice you need to leave. Carbon must be the only ad network on your site, so drop any others first. +BuySellAds is the company. Carbon Ads is its ad program for developer and design sites. -## What's similar if Carbon Ads doesn't reply? +## When should you use the API instead of the tag? -[EthicalAds](/ad-networks/ethicalads) also shows one ad that fits the page, and it publishes its share and payment minimum. It suits developer and open source sites. +When you want full control over how the ad looks on your page, such as in a docs theme or a single-page app. -## How can you check if a site uses Carbon Ads? +## What's similar if Carbon doesn't have room? -Look for Carbon Ads in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +[EthicalAds](/ad-networks/ethicalads) also shows one ad per page to developers, and it publishes its share and payment minimum. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/intro.mdx index 164f147b..01e0073f 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/intro.mdx @@ -1 +1 @@ -Carbon Ads, from BuySellAds, places ads built to fit each site's design. It reviews each application and publishes when and how it pays, but not the publisher share. +Carbon Ads, from BuySellAds, shows one small, quiet ad per page to developer and design readers. It's invite only and replaces every other ad on your site, so it suits tech blogs, docs, and open source projects that want one clean ad instead of a page full of banners. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/joining.mdx index 84187b5f..78ba54f7 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/joining.mdx @@ -1,3 +1 @@ -BuySellAds reviews each site's monthly pageviews, how well its ads fit your readers, and whether the site is kept up to date. It doesn't set a fixed traffic minimum. - -Demand is strongest for English-speaking developer and design readers. That's where advertisers spend most, not a closed list of countries. +Apply on the [Carbon join page](https://www.carbonads.net/join). BuySellAds also checks whether it has room for more sites, so a good fit can still be told to wait. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/pay.mdx index 467e2ec3..23848250 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/pay.mdx @@ -1,5 +1,3 @@ ## How does Carbon Ads pay? -Each month's earnings land in your BuySellAds account after the month ends, and you can withdraw them some weeks later. Each withdrawal method has its own minimum, so pick one your earnings clear. Open Collective payouts run quarterly when you ask for them. - -The publisher share and currency are not public. +Each withdrawal method has its own minimum and may charge a fee, so pick one your earnings clear before you count on a payout. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/rules.mdx index f0bbdcf1..55aa510c 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/rules.mdx @@ -1,3 +1,5 @@ ## What rules does Carbon Ads set? -Carbon is an exclusive network. Once you join, you show only Carbon ads on your site, and you can't use Carbon as backfill for another network. Carbon Ads builds each ad unit to fit the publisher's design. Contract length and notice are not in its FAQ. +Carbon must be the only ads on your whole site. You can't run it next to AdSense or another network, and you can't use Carbon as backfill for one. Joining means replacing your current display ads, not adding to them. + +Ask how much notice ends the agreement. Its FAQ doesn't say. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/service.mdx index 1b5aa8de..de2468ea 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/buysellads-carbon-ads/service.mdx @@ -1,3 +1,3 @@ ## What does Carbon Ads do for you? -You get performance tracking, analytics, monthly reports, and suggestions to improve results. +Carbon builds the ad unit to fit your design, and you add it with the Carbon tag or its API. You get performance tracking, analytics, monthly reports, and tips to improve results. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/clickio/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/clickio/article.mdx index 72ac0291..2851a4ef 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/clickio/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/clickio/article.mdx @@ -1,26 +1,18 @@ ## Is Clickio a fit for a site outside the US? -It can be. Clickio sets its traffic bar by visitor region, with rules for readers across Europe, Latin America, and elsewhere. The bar is lowest for the UK, France, the US, Canada, and Australia. Sites in sanctioned countries can't join. +Yes, more than most managed networks. Clickio publishes separate guides for Italy, Spain, the rest of Europe, Portugal, Brazil, Colombia, Mexico, and the rest of the world. The guide rises outside the main English-speaking markets, so check the row for where most of your readers live. -## What if your traffic is below Clickio's bar? +## What if your traffic is below Clickio's guide? -Clickio may still take your site if it earns enough from ads. Revenue counts as well as pageviews, so mention your earnings when you apply. Keep in mind the earnings rule can also apply after you join, not only at the start. +Lead with your ad revenue. If you already earn enough from ads, Clickio may take the site anyway. Have a few months of earnings reports ready, since it can ask for three in a row. ## What should you have ready before you apply? -1. GA4 access, or a six-month traffic report if Clickio can't verify your traffic another way. +1. GA4 access, or a six-month traffic report. 2. An ads.txt file you can edit. 3. An IAB-approved consent tool on your site. -4. Content you own or have rights to, that follows AdSense policies. +4. Original or licensed content that follows AdSense policies. -## Can you keep other ad partners with Clickio? +## Where else can a global site go? -Clickio's entry rules don't say it must be your only partner. Confirm what your agreement says before you add others. - -## Where else can a smaller or global site go? - -[Publift](/ad-networks/publift) looks at ad revenue first and works best with most readers in the Americas, Europe, or Australia and New Zealand. [Google AdSense](/ad-networks/google-adsense) has no traffic minimum. Networks like [Raptive](/ad-networks/raptive) and [Monumetric](/ad-networks/monumetric) want a large share of readers in a few English-speaking countries. - -## How can you check if a site uses Clickio? - -Look for Clickio in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +[Publift](/ad-networks/publift) also looks at ad revenue first. [Google AdSense](/ad-networks/google-adsense) has no traffic minimum. [Raptive](/ad-networks/raptive) and [Monumetric](/ad-networks/monumetric) want most readers in a few English-speaking countries. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/clickio/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/clickio/intro.mdx index 877c2b52..328c72dd 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/clickio/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/clickio/intro.mdx @@ -1 +1 @@ -Clickio is an ad platform that can run a site's ads as a fully managed service. It works with sites in many regions, and its traffic bar depends on where readers are. +Clickio runs ads for content sites across Europe, Latin America, and the English-speaking markets, with a fully managed option. It sets its traffic guide by where your readers live, so a site outside the US can still fit. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/clickio/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/clickio/joining.mdx index 1ccc21a9..2b148065 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/clickio/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/clickio/joining.mdx @@ -1,5 +1,3 @@ -The traffic Clickio wants depends on where your visitors are. Sites with readers in the UK, France, the US, Canada, or Australia have the lowest bar, and other regions need more. A smaller site can still qualify if it earns enough from ads. +Find the row for where most of your readers live in Clickio's [entry standards](https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards). The guides are indicative, so meeting one doesn't guarantee approval, and missing one doesn't rule you out if your ad revenue clears the other route. -Your content must be yours or licensed, and it must follow AdSense policies. Adult, shocking, and racially intolerant content isn't allowed. Clickio also lists sanctioned countries it can't work with, including Cuba, Iran, Syria, Russia, and Sudan. - -You'll add Clickio's ads.txt lines and use an IAB-approved consent tool. Clickio checks your traffic through GA4 or another independent source. If it can't, it asks for a six-month traffic report instead. +Clickio can't work with sanctioned countries, including Cuba, Iran, Syria, Russia, and Sudan. You start through the [contact page](https://clickio.com/contact/). diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/clickio/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/clickio/pay.mdx index bd586ead..a62fa9ed 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/clickio/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/clickio/pay.mdx @@ -1,5 +1,3 @@ ## How does Clickio pay? -Clickio bills monthly and pays around the 25th to 30th of the month payment is due. The help page gives one timing for everyone. The publisher agreement also offers a faster option, but only for demand partners that pay that fast. The minimum depends on how you're paid, and some methods can pay in your local currency. - -There's no fixed share. Your commission depends on the rates and events each advertiser picks. +There's no fixed share. Your commission depends on the rates each advertiser sets, and Net 30 applies only to demand partners that pay that fast. Some methods pay in your local currency. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/clickio/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/clickio/rules.mdx index 0279c4f8..533ffb00 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/clickio/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/clickio/rules.mdx @@ -1,3 +1,3 @@ ## What rules does Clickio set? -Clickio's entry rules don't say it must be your only ad partner, and they don't set a notice period. Clickio Prism, its CDN product, has separate rules. +Viewability has to stay above 50% after you join, and the earnings route can be checked over time, not only at the start. The entry rules don't say whether Clickio must be your only partner, so confirm that in your agreement. Clickio Prism, its CDN product, has separate rules. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/concert/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/concert/article.mdx index dff44d32..da68cf50 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/concert/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/concert/article.mdx @@ -1,19 +1,5 @@ -## What is Concert? +## Who is Concert for? -Concert is a publisher-led advertising marketplace run by Vox Media. The terms on its site are for advertisers who buy ads through it, not for publishers. +Established media groups with news, culture, or entertainment brands that advertisers already know. Membership is a sales partnership between companies. -## Can any site join Concert? - -Concert doesn't publish publisher rules or an application form. Contact its team to ask. - -## What should you ask Concert before you sign? - -Ask for your share, when you're paid, the payment minimum, and whether Concert must be your only ad partner. Ask who decides where ads go and how much notice you need to leave. None of this is public, so get it in writing. - -## What if you want an open application instead? - -Pick a network that publishes its entry rules. [Google AdSense](/ad-networks/google-adsense) has no traffic minimum. [Raptive](/ad-networks/raptive) and [Mediavine](/ad-networks/mediavine) publish their entry rules, share, and pay day. - -## How can you check if a site uses Concert? - -Look for Concert in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +A solo blog or small niche site isn't the audience. If you want an ad network you can apply to today, [Google AdSense](/ad-networks/google-adsense) has no traffic minimum, and [Raptive](/ad-networks/raptive) and [Mediavine](/ad-networks/mediavine) publish their entry rules. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/concert/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/concert/intro.mdx index 360d09bf..d9690461 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/concert/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/concert/intro.mdx @@ -1 +1 @@ -Concert is a publisher-led advertising marketplace run by Vox Media. Its public terms are for advertisers, and its publisher terms are not public. +Concert is Vox Media's ad marketplace for premium publishers, run as a curated supply-side platform that sells big media groups' ad space together. It isn't an open network, so most independent sites can't apply to it directly. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/concert/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/concert/joining.mdx index 1aa2cd7f..413cc01a 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/concert/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/concert/joining.mdx @@ -1 +1 @@ -The Concert terms we found cover advertisers buying ads, not publishers joining. Traffic, content rules, regions, and how to apply are not published. +There's no public publisher form or entry rule. Concert started in 2018 as a group of established digital publishers, and [became a publisher-led SSP in 2022](https://www.voxmedia.com/2022/6/7/23157157/vox-media-concert-ssp-publisher-led-supply-side-platform-trade-desk-as-an-exclusive-launch-partner/). Its members are large media companies, so access is a business conversation with [Vox Media](https://www.voxmedia.com/brands/concert), not an application. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/concert/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/concert/pay.mdx index 4dedddb6..33d7367a 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/concert/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/concert/pay.mdx @@ -1,3 +1,3 @@ ## How does Concert pay publishers? -Not public. Concert doesn't publish a share, timing, minimum, methods, or currency for publishers. +Pay terms are agreed with each member publisher in private. The only public Concert terms are for advertisers. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/concert/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/concert/rules.mdx index 123c777d..f35e58fb 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/concert/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/concert/rules.mdx @@ -1,3 +1,3 @@ ## What rules does Concert set? -Not public. Concert's advertiser terms don't cover a publisher's exclusivity, ad layout, content rules, contract length, or notice. +They're in private publisher agreements. The [Concert Ad Manager terms](https://admanager.concert.io/terms) cover advertisers buying ads, not publishers selling them. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/concert/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/concert/service.mdx index e298c1a3..64d8bd99 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/concert/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/concert/service.mdx @@ -1,3 +1,3 @@ ## What does Concert do for publishers? -Not public. Concert doesn't describe a publisher dashboard, reports, or support on its public pages. +Concert sells its members' ad space to advertisers as one premium marketplace. That gives each member the reach of a much bigger group. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/article.mdx index b9e80897..bfad5f40 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/article.mdx @@ -1,25 +1,15 @@ ## Is EthicalAds a fit for your site? -It suits developer and open source sites that want one clean ad instead of many. It won't fit a page that needs several ad slots, because EthicalAds must be the only ad on that page. +Yes if your readers are developers and you want one clean ad, not many. It won't fit a page that needs several ad slots, or a general site with few technical readers. -## What should you check before you apply? +## Can you apply below the traffic minimum? -Make sure you have a spot for the ad above the fold, on both desktop and mobile. EthicalAds also expects a minimum click-through rate, so a spot readers actually see matters. You'll also need about 50,000 pageviews a month, though EthicalAds may make an exception for a high-quality or growing site. +You can ask, but don't count on it. EthicalAds considers exceptions for strong developer sites that are close or growing fast, and it decides each one itself. -## Can you run EthicalAds with another network? +## How does the share compare with AdSense? -Yes, as long as they never share a page. EthicalAds lets you split your visitors with another network, or set a fallback ad. - -## How does EthicalAds pay compare with AdSense? - -You keep 70%, with a $50 minimum. [Google AdSense](/ad-networks/google-adsense) shows 80%, but that's after its platform fee, and it works out to about 68% for Google Ads demand. Its minimum is $100 in US dollars. - -If your project already takes donations, EthicalAds can pay you through OpenCollective or GitHub Sponsors. +[Google AdSense](/ad-networks/google-adsense) shows a higher headline share, but that comes after its platform fee, and it works out lower for Google Ads demand. EthicalAds earns from fewer ad slots, so compare your total, not the percentages. ## What's similar to EthicalAds? -[Carbon Ads](/ad-networks/buysellads-carbon-ads) also runs one ad built to fit the page. It publishes when and how it pays, but not your share, so you'd need to ask. Carbon must be the only ad network on your site. - -## How can you check if a site uses EthicalAds? - -Look for EthicalAds in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +[Carbon Ads](/ad-networks/buysellads-carbon-ads) also shows one ad per page to developers. Its exclusivity covers your whole site, not one page, and it doesn't publish your share. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/intro.mdx index 9cc387c0..dd01c580 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/intro.mdx @@ -1 +1 @@ -EthicalAds is a privacy-focused ad network for developer and open source sites. It suits sites that can give its one ad a clear spot near the top of the page. +EthicalAds shows one privacy-friendly ad per page to developers, with no tracking of your readers. It suits docs sites, open source projects, and technical blogs that can give that ad a clear spot near the top. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/joining.mdx index 2341a1bd..304cb528 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/joining.mdx @@ -1,3 +1 @@ -EthicalAds is for developer-focused sites. It sets a traffic minimum, but may make an exception for a high-quality or growing site. Once you're approved, you install the EthicalAds ad client, and your site has to meet the publisher policy. - -The ad should sit above the fold on desktop and mobile. EthicalAds expects a click-through rate of at least 0.1%. +Apply on the [EthicalAds publisher page](https://www.ethicalads.io/publishers/). The [publisher policy](https://www.ethicalads.io/publisher-policy/) asks for the ad above the fold on desktop and mobile, or desktop only if mobile isn't possible, and a click-through rate of at least 0.1%. Advertiser demand is strongest for readers in North America and Europe. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/pay.mdx index d530145a..880904ce 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/pay.mdx @@ -1,3 +1,3 @@ ## How does EthicalAds pay? -EthicalAds pays monthly once your balance reaches the minimum, aiming to pay by the 15th. Methods include Stripe Connect bank transfer, PayPal, OpenCollective, and GitHub Sponsors. +If your project already takes donations, you can be paid through Open Collective or GitHub Sponsors instead of a bank or PayPal. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/rules.mdx index 572f0717..3bcfcf9a 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/rules.mdx @@ -1,5 +1,5 @@ ## What rules does EthicalAds set? -Don't show another ad on the same page as an EthicalAds ad. You can use a fallback ad, or show EthicalAds to some visitors and another network to others. +Only one ad shows on a page with EthicalAds. You can still use other networks on other pages, split visitors between EthicalAds and another network, or set a fallback ad. -Content that breaks the policy can get your ads turned off. The policy doesn't set a contract term or notice period. +Content that breaks the policy can get your ads turned off. The policy sets no contract term or notice period. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/service.mdx index 56209111..8ff7d799 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/ethicalads/service.mdx @@ -1,3 +1,3 @@ ## What does EthicalAds do for you? -The publisher policy explains setup and the rules. Dashboard features and support response times are not public. +EthicalAds picks ads by the topic of your page, not by tracking your readers. The [publisher guide](https://www.ethicalads.io/publisher-guide/) covers setup and where to place the ad. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/article.mdx index 2bde1087..45c20d4b 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/article.mdx @@ -1,23 +1,15 @@ ## Who is Ezoic a fit for now? -Large sites. New sites need a lot of monthly users to join the main program, and the content must be original, in a supported language, and follow AdSense policies. You don't need AdSense approval first for most sites. +Large blogs, news sites, and web tools with a lot of monthly users and Google Analytics already set up. You usually don't need AdSense approval first. ## Can a small site still join Ezoic? -Not as a new site on the main program. New sites below the traffic rule can apply to the Ezoic Incubator instead. Sites already earning with Ezoic before the rule changed can stay. +Rarely, as a new site. The Incubator is the only route below the rule, and with about 20 places a month, it isn't reliable access. One owner of a 3.5-month-old site with under 2,000 monthly visitors [said in 2026](https://www.reddit.com/r/Blogging/comments/1uv87ne) the Incubator turned them down. -## What should you have ready before you apply? +## Do older Ezoic earnings reports still apply? -Google Analytics on your site, since Ezoic uses it to check your traffic. Your visitors need to be real people, not bots. - -## How does Ezoic's share compare? - -The terms give you at least 82% of net ad revenue, and the minimum payout is $20. That share is of net revenue, so don't compare it head to head with a share of gross. Ask Ezoic what's taken out before the split. +Not for joining. Most posts about small sites on Ezoic predate the February 2026 rule, and they count visits or pageviews, not monthly active users. ## Where can you go if Ezoic says no? -[Journey by Mediavine](/ad-networks/journey-by-mediavine) starts at 1,000 premium sessions a month. [Monumetric](/ad-networks/monumetric) and [Raptive](/ad-networks/raptive) take smaller sites, if a large share of readers are in the US or a few other English-speaking countries. [Google AdSense](/ad-networks/google-adsense) has no traffic minimum. - -## How can you check if a site uses Ezoic? - -Look for Ezoic in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +[Journey by Mediavine](/ad-networks/journey-by-mediavine) and [Monumetric](/ad-networks/monumetric) take smaller sites, mostly with readers in the US and a few other English-speaking countries. [Google AdSense](/ad-networks/google-adsense) has no traffic minimum. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/intro.mdx index 7c5efc69..3df13485 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/intro.mdx @@ -1 +1 @@ -Ezoic runs ads and site tools for website publishers. New sites need large traffic to join, and smaller sites can apply to its Incubator. +Ezoic places and tests ads on your site for you, with extra publisher tools in one dashboard. It was long the easy first step up from AdSense, but since February 2026 new sites need far more traffic, and smaller sites go through a small Incubator program. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/joining.mdx index 0c84a700..842f3b4e 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/joining.mdx @@ -1,3 +1,3 @@ -Ezoic set its current traffic rule for new sites in February 2026. Sites already earning with Ezoic before February 19, 2026 can keep going under the old rule. Smaller sites can apply to the Ezoic Incubator. +Start on the [Ezoic get started page](https://www.ezoic.com/get-started/). Check monthly active users in Google Analytics, not your pageview total. Older access under the pre-2026 rules doesn't carry over to a new site you add. -Your content must be original and follow AdSense policies, and your traffic must come from real people. +Below the traffic rule, apply to the [Ezoic Incubator](https://support.ezoic.com/kb/article/ezoic-incubator-program). diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/pay.mdx index 36ea27da..bdef0cc3 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/pay.mdx @@ -1,5 +1,3 @@ ## How does Ezoic pay? -Ezoic's terms say you get at least 82% of net ad revenue, unless you've signed a different agreement. They say payment comes about 35 days after the advertiser pays Ezoic. - -Ezoic's payment help page describes a Net 30 cycle instead. We go by the legal terms, but ask Ezoic which applies to you. +Ezoic's legal terms and its payment help page describe different timing. Ask which applies to your account. The share is of net display-ad revenue, so ask what comes out before the split. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/rules.mdx index b2377a6b..bdb72af5 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/rules.mdx @@ -1,3 +1,3 @@ ## What rules does Ezoic set? -Your content must follow AdSense policies. Exclusivity, ad placement controls, contract length, and notice are not public. +Your content must be original, in a language AdSense supports, and follow Google's publisher policies. Your traffic must come from real people. Ask what notice ends the agreement and whether other ad partners can stay. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/service.mdx index 2573c8a6..39007bcc 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/ezoic/service.mdx @@ -1,3 +1,3 @@ ## What does Ezoic do for you? -Ezoic offers a dashboard and publisher tools through its site. Exact reporting and support levels are not public. +Ezoic places and tests your ads and gives you a dashboard with earnings and publisher tools. You add it with its JavaScript code and link Google Analytics so it can verify your traffic. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/freestar/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/freestar/article.mdx index e04f58a0..804b895d 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/freestar/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/freestar/article.mdx @@ -1,26 +1,15 @@ ## Is Freestar a fit for a growing site? -Only once it's large. Freestar usually works with high-traffic sites, and it checks where your readers are. A site with most readers outside the US, UK, Canada, New Zealand, and Australia won't meet the rule, even if it's big. +If your readers fit. Size is a guide, but the two audience checks aren't. A big site with most readers outside the five countries, or mostly paid traffic, won't pass. -## What should you have ready before you apply? +## Does social traffic count as organic? -1. GA4 access to share during review. -2. Your past traffic and revenue numbers. -3. Original content made for people, and brand safe. -4. Good standing with major ad providers. +Yes. Freestar counts social, news feeds, YouTube, Reddit, and syndication, as well as search. A site that grew on Pinterest or Discover can still pass the organic check. -## How long does it take to start with Freestar? +## What do publishers say about getting in? -Plan for several weeks. Freestar says onboarding commonly takes three to six weeks, with an account manager and a technical team guiding the setup. - -## What should you ask before you sign? - -Your share, pay day, payment minimum, and whether Freestar must be your only ad partner. None of these are public. Ask how much notice you need to leave, too. +Reports are old and thin. A [2019 Reddit thread](https://www.reddit.com/r/adops/comments/bxgb6c) has publishers saying smaller sites were accepted, but they counted ad impressions, not pageviews, so they don't tell you the bar today. ## What fits if you're not at Freestar's size yet? -[Raptive](/ad-networks/raptive) has a much lower pageview bar with a similar location rule. [Playwire](/ad-networks/playwire) asks for less traffic and looks for a good footprint in English-speaking countries, not a set share. [Mediavine](/ad-networks/mediavine) looks at yearly ad revenue instead of pageviews. - -## How can you check if a site uses Freestar? - -Look for Freestar in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +[Raptive](/ad-networks/raptive) has a lower bar with a similar location rule. [Playwire](/ad-networks/playwire) asks for less traffic. [Mediavine](/ad-networks/mediavine) looks at yearly ad revenue instead of pageviews. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/freestar/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/freestar/intro.mdx index ab4e5a15..e4e2231d 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/freestar/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/freestar/intro.mdx @@ -1 +1 @@ -Freestar is a managed ad service for large, brand-safe sites. It wants a big share of readers in the US, UK, Canada, New Zealand, or Australia. +Freestar runs ads and ad operations for big, brand-safe sites in sports, news, finance, gaming, and entertainment. It checks where your readers are and how they find you, so it suits established sites with mostly English-speaking readers. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/freestar/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/freestar/joining.mdx index c9e97049..6a08b9bd 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/freestar/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/freestar/joining.mdx @@ -1,5 +1,3 @@ -Freestar's traffic rule is what it usually asks for, not a strict cutoff, so ask its team if you're close. At least 50% of your traffic must come from the US, UK, Canada, New Zealand, or Australia. +Apply on the [Freestar contact page](https://freestar.com/contact-us/). Its [quality requirements](https://freestar.com/publisher-quality-requirements/), updated in August 2026, treat the pageview figure as typical, not a floor. The two 50% checks are firm. -Your content must be original and made for people, and you need good standing with major ad providers. Explicit sexual content, piracy, violence, hate speech, and illegal drugs aren't allowed. - -During review, Freestar may ask for GA4 access and your past traffic and revenue. +Explicit sexual content, piracy, violence, hate speech, and illegal drugs aren't allowed. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/freestar/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/freestar/pay.mdx index 3d709ff0..d9025cee 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/freestar/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/freestar/pay.mdx @@ -1,3 +1,3 @@ ## How does Freestar pay? -Not public. Freestar doesn't publish its share, payment timing, minimum, methods, or currency. +Freestar sets pay terms in each publisher's contract. Ask for your share, pay day, and minimum in writing. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/freestar/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/freestar/rules.mdx index 7d0eb83a..70950fe8 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/freestar/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/freestar/rules.mdx @@ -1,3 +1,3 @@ ## What rules does Freestar set? -Not public. Freestar doesn't publish exclusivity, ad placement controls, contract length, or notice. +The contract sets them. Freestar runs your display ad setup, so ask whether other partners can stay, who controls ad placement, and what notice ends the deal. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/article.mdx index 549ef9df..15ea5638 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/article.mdx @@ -1,19 +1,11 @@ -## What is a supply-side platform? +## Who is Geniee SSP a fit for? -A supply-side platform (SSP) sells a publisher's ad space to many buyers at once, in real time. +Established web or app publishers with Japanese or Asian audiences, and someone who manages the ad setup. An SSP adds demand to a bigger setup. It isn't a plug-and-play network for a new blog. -## How do you join Geniee SSP? - -Sign up through Geniee's online publisher form. Its terms of use set the content rules and how you're paid. +For a first ad network you run yourself, [Google AdSense](/ad-networks/google-adsense) is simpler. ## What should you ask Geniee before you sign? -Your share, since Geniee doesn't publish a fixed one. Also ask how much notice you need to give to leave, since the terms only say how Geniee can end the agreement. - -## What else can you join with public rules? - -[Google AdSense](/ad-networks/google-adsense) has no traffic minimum. [Sovrn](/ad-networks/sovrn) runs an ad exchange for sites with more than 100,000 visits a month, with a $25 payment minimum. - -## How can you check if a site uses Geniee SSP? - -Look for Geniee SSP in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +1. What share do you keep? +2. What are the current payment minimums? +3. How much notice do you give to leave? diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/intro.mdx index abf46e44..8a45e11b 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/intro.mdx @@ -1 +1 @@ -Geniee SSP is a supply-side platform run by Geniee. It sells publishers' ad space to buyers, and you sign up through an online publisher form. +Geniee SSP is a Japanese supply-side platform that sells web and app ad space to many buyers at once. It suits established publishers, especially in Japan and Asia, who run their own ad setup and want another source of demand. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/joining.mdx index 381dfd36..879e1c77 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/joining.mdx @@ -1,3 +1 @@ -Geniee doesn't publish a traffic minimum or the regions it accepts. You sign up through its online publisher form, and its terms of use set the content rules. - -Once you're in, you install Geniee's ad tags and keep them on your site. +Apply through the [Geniee SSP sign-up](https://admin.genieessp.com/app/signup/en_US). Geniee approves each publisher, and the [2025 publisher terms](https://geniee.co.jp/doc/terms_of_service_en20250831.pdf) set the content rules. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/pay.mdx index 435bb99e..952c4a3f 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/pay.mdx @@ -1,5 +1,3 @@ ## How does Geniee SSP pay? -Geniee works out your earnings the month after you earn them, then pays by the end of the second month after that. It only pays once the advertiser has paid Geniee, so a late advertiser can delay your money. - -The minimum is higher for a wire transfer than for PayPal or Payoneer. Geniee doesn't publish a fixed share. +Geniee pays only once the advertiser has paid it, so a late advertiser can delay your money. The minimums come from older terms, so confirm them. There's no fixed share. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/rules.mdx index 4a767058..de7fd9c6 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/rules.mdx @@ -1,5 +1,7 @@ ## What rules does Geniee SSP set? -Geniee's terms of use set the content rules, and you must keep its tags in place. You tell Geniee where you'll place ads. If it asks for changes and you can't agree, Geniee decides the placement. You also must tell Geniee before you use a similar service alongside it, or replace it with one. +These provisions come from Geniee's publisher terms, and we haven't confirmed each one in the 2025 version. Check them in the agreement you sign. -The agreement runs from the day Geniee approves you until it ends. Geniee can end it with 30 days' notice, or at once if you break the terms. The terms don't say how much notice you must give to leave. +You tell Geniee where you'll place ads. If it asks for changes and you can't agree, Geniee decides. You also have to tell Geniee before you use a similar service alongside it, or replace it with one. + +Geniee can end the agreement with 30 days' notice, or at once if you break the terms. The terms don't say how much notice you give to leave. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/service.mdx index 6dcc673b..a51621fa 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/geniee-ssp/service.mdx @@ -1,3 +1,3 @@ ## What does Geniee SSP do for you? -Not public. Geniee doesn't describe its publisher dashboard, reports, or support. +An SSP, or supply-side platform, sells your ad space to many buyers in real-time auctions. Geniee runs that for web and app inventory, with full support in its home market of Japan. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/article.mdx index 723e9be7..b8017d2e 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/article.mdx @@ -1,23 +1,19 @@ ## Is AdSense a good first ad network? -For many new sites it's the easiest start. There's no traffic minimum, and you set it up yourself in your AdSense account. Help comes through the AdSense Help Center, so you place and tune ads on your own. +For most new sites, yes. There's no traffic number to hit and no contract, and you control every ad yourself. The trade-off is that nobody tunes your ads for you. -## What should you check before you apply? +## Why does AdSense reject new sites? -Make sure your content is original and follows the AdSense Program Policies, and that you can edit your site's HTML to add the code. Check that AdSense, and a payment method you can use, are available in your country. Review usually takes a few days, but can take two to four weeks. +Google judges your content, not a traffic number. It looks for original, useful pages that follow its policies. One owner of a three-week-old calculator site [said in 2026](https://www.reddit.com/r/passive_income/comments/1tyq291) they were rejected twice, without a clear reason. ## When will you see your first payment? -Only once your balance passes the minimum. If you earn $20 a month, that's five months before your first payment. After that, Google pays once a month. +Only once your balance passes the minimum. A site earning $20 a month waits about five months for its first payment. ## Can you use AdSense with another network? -AdSense doesn't ask to be your only ad partner. Some managed networks do, such as [Newor Media](/ad-networks/newor-media)'s Elevate program and [Playwire](/ad-networks/playwire), so check their rules before you add one. +Yes. Some managed networks want to be your only ad partner, such as [Newor Media](/ad-networks/newor-media)'s Elevate program and [Playwire](/ad-networks/playwire), so check their rules before you add one. ## Where can you go once you outgrow AdSense? -[Journey by Mediavine](/ad-networks/journey-by-mediavine) starts at 1,000 premium sessions a month. [Monumetric](/ad-networks/monumetric)'s Propel program starts at 10,000 monthly pageviews and [Raptive](/ad-networks/raptive) at 25,000. Both want a large share of readers in the US and a few other English-speaking countries. [Mediavine](/ad-networks/mediavine) looks at yearly ad revenue instead of traffic. - -## How can you check if a site uses Google AdSense? - -Look for Google AdSense in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +[Journey by Mediavine](/ad-networks/journey-by-mediavine) and [Monumetric](/ad-networks/monumetric)'s Propel program take smaller sites with mostly US and other English-speaking readers. [Raptive](/ad-networks/raptive) comes next. [Mediavine](/ad-networks/mediavine) looks at yearly ad revenue instead of traffic. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/intro.mdx index 70717d07..1addd587 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/intro.mdx @@ -1 +1 @@ -Google AdSense is Google's ad program for website publishers. You add its code to your site and run your ads yourself from your AdSense account. +Google AdSense is the self-serve ad program most new sites try first. You add Google's code, choose where ads go, and manage everything yourself from your AdSense account, with no account manager. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/joining.mdx index 1b7abed4..104131a6 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/joining.mdx @@ -1,3 +1,3 @@ -You must be at least 18, own original content that follows AdSense policies, and be able to edit your site's HTML. There's no traffic minimum. +Sign up on the [AdSense start page](https://www.google.com/adsense/start/), after checking that your [country is open for sign-up](https://support.google.com/adsense/answer/13402307?hl=en). -You sign up in an AdSense account. Whether AdSense is open to you, and how you can be paid, depends on your country. +No traffic number doesn't mean easy approval. Google reviews your content for originality, quality, and policy compliance, and it can turn down a new site that's thin or unfinished. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/pay.mdx index 8c4754df..050a9f67 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/pay.mdx @@ -1,5 +1,3 @@ ## How does Google AdSense pay? -For ads on your content, you get 80% after the advertiser platform fee. When the ad comes from Google Ads, that works out to about 68% of what the advertiser pays. Other AdSense products have different shares. - -Google pays once a month, usually between the 21st and 26th, when your balance passes the minimum and there's no hold on your account. The minimum is set for each currency, and payment methods depend on your country. +The share is for ads on your content, after the advertiser platform fee. With Google Ads demand, it works out to about 68% of what the advertiser pays. Other AdSense products have different shares, and payment methods depend on your country. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/rules.mdx index 4bbe9716..fb593ae7 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/rules.mdx @@ -1,3 +1,3 @@ ## What rules does Google AdSense set? -Where you place ads must follow the AdSense Program Policies, which also list the content that isn't allowed. AdSense doesn't ask to be your only ad partner. +Ad placement and content must follow the AdSense Program Policies. AdSense doesn't ask to be your only ad partner, but any other ads on the page must still fit Google's placement and density rules. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/service.mdx index ba66eadb..b8e1eaa6 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/google-adsense/service.mdx @@ -1,3 +1,3 @@ ## What does Google AdSense do for you? -You get reports in your AdSense account, and help through the AdSense Help Center and its policy pages. +Google fills your ad slots and can place ads for you with Auto ads. You get reports in your AdSense account and help through the AdSense Help Center. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/article.mdx index c90e43eb..04cd5c5c 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/article.mdx @@ -1,23 +1,11 @@ ## Is Infolinks a fit for a small site? -It can be. Infolinks is open to sites of any size, so it can work before you qualify for a managed network. It won't take illegal, offensive, adult, or porn content. - -## How long does Infolinks take to approve you? - -Usually about 48 hours after you send its short sign-up form. Once approved, you add the Infolinks script to your site. +As an extra, yes. With no traffic minimum, it's one of the few ad networks a small site can add today. Don't expect it to replace a main display network. It earns from extra formats around your text. ## What are in-text ads? -Ads that sit inside your words. Infolinks links some words in your text, and an ad appears when a reader hovers over one. You can change how they look and how many show. - -## Can you try Infolinks before you commit? - -The old public agreement starts with a 30-day trial, then renews every 12 months. It can be ended on one business day's notice. That agreement was last updated in 2015, so ask whether the current one still works this way. - -## What else can a small site try? - -[Google AdSense](/ad-networks/google-adsense) has no traffic minimum. [Journey by Mediavine](/ad-networks/journey-by-mediavine) starts at 1,000 premium sessions a month. +Ads inside your words. Infolinks links some words in your text, and an ad appears when a reader hovers over one. -## How can you check if a site uses Infolinks? +## Are Infolinks' public terms current? -Look for Infolinks in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +Partly. The service agreement dates from 2015, while the payment and sign-up help pages are current. Where they differ, ask Infolinks which applies to you. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/intro.mdx index f06d2c84..e6dc1d05 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/intro.mdx @@ -1 +1 @@ -Infolinks runs in-text ads and other ad units for websites. It reviews new sites within 48 hours. +Infolinks adds in-text, overlay, and native ads that sit around your content instead of in fixed banner slots. Sites of any size can apply, so it suits small and medium sites that want extra ad income next to their main ads. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/joining.mdx index 70ac7831..3663261b 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/joining.mdx @@ -1,3 +1 @@ -Any size of site can apply, and there's no traffic minimum. Infolinks reviews each site and may reject it. - -Illegal, negative, offensive, adult, obscene, and porn content isn't allowed. You sign up with a short web form, and review usually takes 48 hours. +Sign up with the short form on the [Infolinks publisher page](https://www.infolinks.com/publishers/). Every site is reviewed, and some are turned down. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/pay.mdx index ccc7fb2c..51483c4b 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/pay.mdx @@ -1,5 +1,3 @@ ## How does Infolinks pay? -The public agreement gives you 70% for In-Text ads and pays 45 working days after the month ends. Other ad formats have different shares. The payment minimum depends on the method you pick. - -That agreement was last updated in 2015. If you sign a newer one, the newer terms count. +The share and timing come from the 2015 agreement, and other formats pay different rates. The current help page says 45 days, not 45 working days. If you sign a newer agreement, its terms count. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/rules.mdx index ac48f346..8cf6af33 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/rules.mdx @@ -1,5 +1,5 @@ ## What rules does Infolinks set? -The old public agreement starts with a 30-day trial, then renews every 12 months. It can be ended on one business day's notice. +These are provisions of the 2015 agreement, not confirmed current terms. It starts with a 30-day trial, then renews every 12 months, and can be ended on one business day's notice. It also bars publishers terminated by another ad platform, such as AdSense, in the past 24 months. -Adult and illegal content is banned. Check the current terms for exclusivity and ad placement rights. +The current help pages don't restate them or say whether you can run other ad networks alongside. Check the agreement you're offered. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/service.mdx index 7da40934..9ce5e7f5 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/infolinks/service.mdx @@ -1,3 +1,3 @@ ## What does Infolinks do for you? -You track earnings in the Publisher Center. You can change how the ads look and how many show. +You track earnings in the Publisher Center and choose which ad types show, how they look, and how many appear. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/article.mdx index e9ef6091..bdd0b580 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/article.mdx @@ -1,26 +1,30 @@ ## Who is Journey a fit for? -Bloggers and small content sites that have started to get steady traffic. The bar is 1,000 premium sessions a month. Your content has to be original, made by people, updated, and brand safe. +Growing content blogs, such as food, travel, lifestyle, and evergreen how-to sites, that have outgrown running AdSense by hand. It isn't a fit for a site with bought or bot traffic, or one that can't install Grow. -## How is Journey different from Mediavine? +## Does hitting the session count mean you're in? -Journey is for sites still growing, with a much lower bar to join. [Mediavine](/ad-networks/mediavine)'s main program is for sites that already earn steady ad revenue. Journey pays a 70% share, below the main program's tiers, on the same Net 65 timing. Its other rules aren't public, so don't assume they match Mediavine's. +No. Mediavine weighs content and audience mix as well. Publisher reports point both ways: -## What should you have ready before you apply? +| Report | Sessions a month | Readers | Result | +| --- | --- | --- | --- | +| [Blog, 2024](https://www.reddit.com/r/Blogging/comments/1ezlcpk) | About 15,000 | 35% from top-tier countries | Accepted after seven weeks | +| [German-language blog, 2024](https://www.reddit.com/r/Blogging/comments/1dkzgsl) | About 70,000 | About 90% German | Accepted after about 60 days | +| [Site, 2026](https://www.reddit.com/r/adops/comments/1vn39i3) | About 4,400 | 77% from top-tier countries | Rejected | -1. The Grow plugin installed and running for at least 30 days. -2. A clean record with Google, with no active AdSense or Ad Exchange issues. -3. A domain with about four months of history, which Journey says its ad partners expect. -4. A clear picture of your traffic: where it comes from, which countries, and who reads you. +These are single, self-reported cases. They show the review looks past one number, not where the line is. -## What should you ask before you sign? +## How is Journey different from Mediavine? -Journey's payment minimum and payment methods aren't public. Ask for them, and ask whether Journey must be your only ad partner. +Journey is for sites still growing, with a far lower traffic rule. [Mediavine](/ad-networks/mediavine)'s main program looks at ad revenue from the previous calendar year. Acceptance into Journey doesn't mean you qualify for the main program. -## What else fits a site this size? +## What should you have ready before you apply? -[Google AdSense](/ad-networks/google-adsense) has no traffic minimum. [Monumetric](/ad-networks/monumetric)'s Propel program starts at 10,000 monthly pageviews for English sites. +1. Grow installed and running for at least 30 days. +2. A Google account with no active AdSense or Ad Exchange issues. +3. About four months of domain history, per the 2024 guide. +4. A clear picture of where your traffic comes from and who reads you. -## How can you check if a site uses Journey by Mediavine? +## What else fits a site this size? -Look for Journey by Mediavine in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +[Google AdSense](/ad-networks/google-adsense) has no traffic number to hit. [Monumetric](/ad-networks/monumetric)'s Propel program also takes smaller English-language sites. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/intro.mdx index 39953461..44c24c3d 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/intro.mdx @@ -1 +1 @@ -Journey by Mediavine is Mediavine's ad program for smaller, growing sites. It suits bloggers who aren't ready for Mediavine's main program yet. +Journey by Mediavine is Mediavine's ad program for blogs that have just started getting steady traffic. Mediavine runs the ads for you through its Grow plugin, so it's often the first managed network a growing food, travel, or lifestyle blog joins. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/joining.mdx index bf1ce98e..3a3e79bc 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/joining.mdx @@ -1,3 +1,3 @@ -Journey's traffic bar is low. Your content must be original, updated often, made by people, and brand safe, with an engaged audience. +Apply through [Mediavine's application page](https://www.mediavine.com/application-requirements/). [Grow](https://www.journeymv.com/getting-started-with-journey-by-mediavine/) needs time on your site first, because Journey reviews the traffic data it collects: sources, countries, and demographics, not just the session count. -Mediavine looks at your traffic sources, visitor countries, and reader demographics. You need the Grow plugin running on your site so Journey can collect data for its review. It takes sites from anywhere Mediavine does business. Journey also expects some domain history, because its ad partners ask for it. +The domain history rule comes from Journey's getting-started guide, dated April 2024, which said its ad partners expect it and that this would likely stay the same. The current application page doesn't repeat it, so confirm when you apply. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/pay.mdx index f6815901..1b7e54a2 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/pay.mdx @@ -1,5 +1,3 @@ ## How does Journey by Mediavine pay? -Journey publishes its share and payment timing. Its share is lower than the main Mediavine program pays, and the timing matches it. - -The payment minimum, methods, and currency for Journey aren't published. Don't assume Mediavine's main program minimum and methods apply. +Journey's share is lower than the main Mediavine program's, on the same timing. Journey doesn't publish its payment minimum or methods, so don't assume Mediavine's apply. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/rules.mdx index f7fbb649..857a83c9 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/rules.mdx @@ -1,3 +1,3 @@ ## What rules does Journey by Mediavine set? -Not public. Exclusivity, ad placement rules, contract length, and notice for Journey aren't published. +Journey doesn't publish its exclusivity, ad placement, or notice terms. Ask for them once you're accepted, before you remove other ads. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/service.mdx index 830b3bda..7bb12722 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/journey-by-mediavine/service.mdx @@ -1,3 +1,3 @@ ## What does Journey by Mediavine do for you? -Journey works through the Grow plugin. Other service and reporting details are not public. +Mediavine places and runs the ads, and Grow collects the traffic data its review and ad setup rely on. Journey is also a path toward Mediavine's main program as your site grows. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/media-net/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/media-net/article.mdx index 2fd0562d..7851f76a 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/media-net/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/media-net/article.mdx @@ -1,25 +1,19 @@ ## Who is Media.net a fit for? -Sites you own and run, with real, unpaid traffic and original content. Media.net checks for bought or invalid traffic, and too much of it can get your account suspended. If another ad provider has suspended or dropped you before, Media.net won't take you. +News, finance, how-to, and other editorial sites with mostly unpaid traffic. A site that buys most of its visitors, or relies on low-quality traffic, is a poor fit. ## What is a contextual ad? -It's an ad picked for the words on the page, not for the person reading it. A page about hiking shows hiking ads. +An ad picked for the words on the page, not the person reading it. A page about hiking shows hiking ads. -## What should you have ready before you apply? +## Can you run Media.net next to another network? -An ads.txt file with Media.net's lines in it, and accurate details about your site. Check its inventory policy for the topics it doesn't allow. +Be careful. The agreement bars services that show substantially similar ads, so a contextual or display network on the same pages may need Media.net's written approval. -## How fast does Media.net pay? - -It pays monthly on Net 30, so a month's earnings arrive about a month after it ends. That's faster than many managed networks here, such as [Mediavine](/ad-networks/mediavine) on Net 65. - -Your pay is based on valid clicks, so earnings depend on readers clicking ads, not only seeing them. +## What do publishers say about Media.net? -## What should you ask before you sign? +Reports are old and vague. One publisher [said in 2023](https://www.reddit.com/r/adops/comments/15ql4jb) they'd gone about six months without support replies. That's one account, with no site size. -Your share and the payment minimum. Neither is public. - -## How can you check if a site uses Media.net? +## How fast does Media.net pay? -Look for Media.net in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +Faster than many managed networks here, such as [Mediavine](/ad-networks/mediavine) on Net 65. Because pay is based on clicks, earnings depend on readers clicking ads, not only seeing them. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/media-net/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/media-net/intro.mdx index 8757ff47..3d7c7022 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/media-net/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/media-net/intro.mdx @@ -1 +1 @@ -Media.net runs a contextual advertising program for publishers, showing ads based on what each page is about. Publishers apply to join, and the rules are in its public agreement. +Media.net is best known for contextual ads, chosen by what each page is about rather than who's reading. It also sells display, native, and video demand and can run a Prebid setup, so it suits content sites with mostly organic readers. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/media-net/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/media-net/joining.mdx index e4d6075a..5e7867f2 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/media-net/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/media-net/joining.mdx @@ -1,5 +1 @@ -Media.net doesn't publish a traffic minimum or accepted regions. Its agreement covers sites you own, run, or control, and you apply through its publisher program. - -Most of your traffic must be organic, and its inventory policy bans invalid or bought traffic above acceptable levels. Your ad requests and site details must be accurate. - -You can't have been suspended or dropped by another ad provider before. The agreement also asks you to tell Media.net about certain past traffic or policy suspensions. +Apply through the [Media.net publisher page](https://www.media.net/publishers). The [inventory policy](https://www.media.net/legal/inventorypolicies/) bans invalid or bought traffic above acceptable levels, and the [publisher agreement](https://www.media.net/legal/) asks you to confirm you've never been suspended or terminated by another monetization provider. If you were ever suspended for invalid traffic, spam, or fraud, you must tell Media.net's compliance team before sending traffic. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/media-net/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/media-net/pay.mdx index d2adf0bf..eec438c5 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/media-net/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/media-net/pay.mdx @@ -1,3 +1,3 @@ ## How does Media.net pay? -Media.net pays monthly on Net 30 terms. Your pay is based on the valid click revenue it receives, minus its commission and costs. The share, minimum, methods, and currency are not public. +Your pay is based on the click revenue Media.net actually collects, minus its commission and costs, so readers have to click, not only see the ads. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/media-net/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/media-net/rules.mdx index e5063d35..eebc0ba6 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/media-net/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/media-net/rules.mdx @@ -1,5 +1,3 @@ ## What rules does Media.net set? -You agree to keep Media.net's confidential information private. Media.net can suspend or end your account for policy problems. - -You can't run another service that shows ads substantially similar to Media.net's. The agreement doesn't set placement rules or a fixed contract term. +You can't run another service that shows ads substantially similar to Media.net's, unless it agrees in writing. Media.net can suspend or end your account for policy problems, and you keep its confidential information private. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/media-net/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/media-net/service.mdx index 68299755..e2d58a07 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/media-net/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/media-net/service.mdx @@ -1,3 +1,3 @@ ## What does Media.net do for you? -The agreement explains how the program runs. Dashboard, reporting, and support levels are not public. +Media.net brings contextual, display, native, and video demand, and can manage a Prebid header bidding setup for you. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/article.mdx index 5e7f405e..ce7d669e 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/article.mdx @@ -1,25 +1,17 @@ ## Who is Mediavine a fit for? -Content sites that already earn steady ad revenue, often in food, travel, home, and similar topics. Mediavine looks at what you earn from ads in a year across all your sites, not a traffic number. Your content needs to be original, high quality, and evergreen. +Content sites with enough ad revenue earned during the previous calendar year, often in food, travel, home, parenting, or personal finance. Earnings from part of that year can count. If you only reached the revenue target this year, you may have to wait until the new year to qualify. ## What should you have ready before you apply? -Proof of what your ads earn now, since the bar is yearly ad revenue. You'll also need to give Mediavine read-only Google Analytics access during review. +1. Proof of last calendar year's ad revenue for the site. +2. Read-only Google Analytics access to share during review. +3. A Google account with no active AdSense or Ad Exchange issues. -You must be in good standing with AdSense and Ad Exchange, with no active policy issues. You don't need to have used AdSense before. +## Does meeting the revenue rule mean you're in? -## What if your site is too small for Mediavine? - -Mediavine runs a second program, [Journey](/ad-networks/journey-by-mediavine), for smaller sites. It has a lower bar to join and the same company behind it. Journey's page lists its rules and the sites that use it. - -## What does the pay day mean? - -Mediavine pays each month's earnings a set number of days after the month ends. Earnings from January arrive a couple of months later, not at the start of February. Plan for that gap if you switch from a network that pays faster. +No. Mediavine still reviews content and audience. In 2026, one publisher [said on Reddit](https://www.reddit.com/r/adops/comments/1wz7cw6) they expected to qualify on last year's earnings but were placed in Journey instead. Another, with about 1.6 million monthly users, [described repeated declines](https://www.reddit.com/r/adops/comments/1xb1r9c) and a 60-day wait to reapply. Neither shared their full revenue or site details. ## How does Mediavine compare with Raptive? -Raptive publishes a 75% share. Mediavine's starts at 75% for new sites and rises to 90% in its top tiers. [Raptive](/ad-networks/raptive) sets a pageview bar and a reader location rule, while Mediavine sets a revenue bar. Raptive pays on Net 45, sooner than Mediavine's Net 65. Mediavine says there's no long-term contract. - -## How can you check if a site uses Mediavine? - -Look for Mediavine in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +[Raptive](/ad-networks/raptive) sets a pageview bar and a reader location rule. Mediavine sets a revenue bar. Both start new sites on the same share, but Mediavine's rises in its higher tiers, while Raptive pays sooner. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/intro.mdx index 4c29fb65..b4e4e174 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/intro.mdx @@ -1 +1 @@ -Mediavine runs the ads for food, travel, home, and other content sites. +Mediavine runs the ads for established food, travel, lifestyle, parenting, and other content blogs, and your share rises as your site grows. It joins on last calendar year's ad revenue, not traffic, so it suits sites that have been earning from ads for a while. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/joining.mdx index bfbfac3d..62e35394 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/joining.mdx @@ -1,3 +1,3 @@ -Mediavine Official is for sites that already earn steady ad revenue. When you apply, Mediavine reviews both your traffic and your content. +Mediavine's [Publisher Path](https://help.mediavine.com/programs-and-the-publisher-path-to-growth) counts ad revenue from the previous calendar year. Last month's earnings, or the last 12 months, aren't the same thing, even if they add up to more. Check the [application requirements](https://www.mediavine.com/application-requirements/) before you apply. -Your content needs to be original, high quality, and evergreen. If your site is still growing, [Journey](/ad-networks/journey-by-mediavine) is Mediavine's separate program for newer sites. +You don't need to have used AdSense before. Still growing? [Journey](/ad-networks/journey-by-mediavine) is Mediavine's separate program for smaller sites. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/pay.mdx index 6a61560a..9d3b4ef1 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/pay.mdx @@ -1,5 +1,3 @@ ## How does Mediavine pay? -Each month's earnings are paid a set number of days after that month ends, on a fixed day of the month or the next business day. Your first payment arrives a couple of months after you start. - -The minimum payout depends on how you're paid, and some international methods need a higher balance. The currency you're paid in depends on the method you pick. +New Official sites in 2026 start on the lowest share, which rises through the Select, Signature, and Premiere tiers as you grow. Older agreements can differ. January's earnings arrive about two months after January closes. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/rules.mdx index 7b956494..3dde10ff 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/rules.mdx @@ -1,5 +1,3 @@ ## What rules does Mediavine set? -Mediavine says there's no long-term contract. You control your ad settings yourself from the dashboard. - -Its rules on content and ad placement are in the [Mediavine help center](https://help.mediavine.com/). +Mediavine says there's no long-term contract. You control your ad settings from the dashboard. Its content and ad placement rules are in the [Mediavine help center](https://help.mediavine.com/). diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/service.mdx index 4df2e262..f0eea320 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/mediavine/service.mdx @@ -1,5 +1,3 @@ ## What does Mediavine do for you? -Your dashboard shows earnings by traffic source, country, device, page, and ad unit, with gross and net revenue side by side. - -Support is open every day of the week through the help center and the publisher community. Tools include Grow and the ad management settings. +Your dashboard shows earnings by traffic source, country, device, page, and ad unit, with gross and net revenue side by side. Support is open every day through the help center and the publisher community. Tools include Grow and the ad management settings. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/mgid/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/mgid/article.mdx index ec5baacb..cdc78bee 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/mgid/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/mgid/article.mdx @@ -1,23 +1,15 @@ ## Who is MGID a fit for? -Sites that want native ads, the kind that look like content links, alongside or instead of banners. MGID's main service asks for at least 3,000 unique visitors a day. Its separate Google Discover offer says it has no minimum. Either way, your site has to pass its traffic quality and content rules. Adult, illegal, hateful, and infringing content isn't allowed. +Article sites, including news, entertainment, and sites outside English, that want native ads as a second income source. Thin sites with few articles won't pass. -## Why does MGID's share depend on the offer? +## Daily or monthly: which traffic rule should you use? -MGID sets pay in each publisher's order, not in one public rate card. The share in one regional offer may not be what you're offered, so compare the order you get. +Whichever you meet. A site with steady daily traffic may clear the daily count, while one with spiky traffic may only clear the monthly total. Check unique visitors in your analytics, not pageviews. -## Which payment method should you pick? +## Can you use MGID with AdSense? -One with a minimum your earnings clear. MGID's minimums range from $50 to $1,000 depending on the method, so a small site can wait a long time on a high one. - -## What could get your MGID account in trouble? - -Invalid traffic. MGID's terms cover it, and they say your revenue can be adjusted. Don't buy traffic or encourage clicks. +Yes. MGID's own materials say so, as long as your pages still meet placement and ad density rules. ## What else runs native ads? [Taboola](/ad-networks/taboola) and [Revcontent](/ad-networks/revcontent) both run recommendation and native ads. Taboola must be your only recommendation service while your deal runs. - -## How can you check if a site uses MGID? - -Look for MGID in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/mgid/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/mgid/intro.mdx index dd61f047..e92e685d 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/mgid/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/mgid/intro.mdx @@ -1 +1 @@ -MGID is a native advertising platform that helps publishers earn from their sites. Its pay terms depend on the offer you sign. +MGID fills recommendation widgets with native ads, the "you may also like" links under and beside articles. It takes sites in most countries and languages, so it suits news, entertainment, and other article sites that want extra income next to their display ads. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/mgid/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/mgid/joining.mdx index 70363ed6..3b8f0b6b 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/mgid/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/mgid/joining.mdx @@ -1,3 +1,3 @@ -MGID sets a daily visitor minimum for its main service, and it emails you a yes or no soon after you apply. It doesn't publish a region rule. Your site also has to pass its traffic quality and content rules. You apply through its publisher sign-up or contact page. +Apply on the [MGID publisher page](https://www.mgid.com/publishers). You need one of the two traffic counts, not both, and both count visitors, not pageviews or sessions. MGID's separate Google Discover offer says it has no traffic minimum, but that applies only to that program. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/mgid/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/mgid/pay.mdx index 2c44e9c4..b5b0d9b0 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/mgid/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/mgid/pay.mdx @@ -1,5 +1,3 @@ ## How does MGID pay? -A regional MGID offer lists a 65% share, Net 30 payment, and minimums from $50 to $1,000 depending on the method. That's one offer, not a rate for everyone. - -MGID's terms say your pay follows your account and order terms and can be adjusted. The order you sign is what counts. +The figures shown come from MGID's public Brazil offer, not a rate for everyone. MGID's terms, updated in July 2026, say your insertion order controls your pay, so compare the order you're offered. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/mgid/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/mgid/rules.mdx index bf926755..fb54ce4d 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/mgid/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/mgid/rules.mdx @@ -1,5 +1,5 @@ ## What rules does MGID set? -The terms cover invalid traffic, how content and ads are shown, and allowed use. They don't set one exclusivity rule or contract length for everyone. +The terms cover invalid traffic, how content and ads are shown, and allowed use, and your revenue can be adjusted for invalid traffic. MGID says you can run AdSense alongside it, as long as placement and ad density rules are met. -A split mentioned in the terms is for an anti-adblock add-on, not the main service. +A revenue split mentioned in the terms is for an anti-adblock add-on, not the main service. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/mgid/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/mgid/service.mdx index 82ae8462..1062238c 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/mgid/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/mgid/service.mdx @@ -1,3 +1,3 @@ ## What does MGID do for you? -The regional offer includes a dedicated account manager and round-the-clock support. Dashboard and reporting details are not public. +MGID supplies recommendation and native ad widgets in more than 70 languages. Its Brazil offer includes a dedicated account manager and round-the-clock support. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/monetizemore-pubguru/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/monetizemore-pubguru/article.mdx index 367694cb..51fdf36e 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/monetizemore-pubguru/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/monetizemore-pubguru/article.mdx @@ -1,23 +1,18 @@ ## Who is PubGuru Premium a fit for? -Sites that already earn well from ads or get heavy traffic. You qualify on either monthly ad revenue or monthly pageviews, counted across your sites. +Big content sites and portfolios, including recipe sites and international groups, that need someone to run yield optimization full time. MonetizeMore's case studies show the scale: a European group with 20+ sites and over 100 million monthly visitors, and the recipe site Panlasang Pinoy. Both are MonetizeMore's own reports, far above the entry rule. ## What's the difference between MonetizeMore and PubGuru? MonetizeMore is the company. PubGuru is its ad platform, and PubGuru Premium is the higher tier with extra tools and a support team. -## Is PubGuru Premium a fit for a smaller site? +## What if you're below both Premium rules? -Not yet. Ask MonetizeMore what it offers below the Premium level. [Publift](/ad-networks/publift) also qualifies sites on ad revenue, with a lower bar. [Mediavine](/ad-networks/mediavine) uses a yearly ad revenue bar. - -## What should you have ready before you contact MonetizeMore? - -Your monthly ad revenue and pageviews for every site you'd bring. If you run several sites, add them up, since Premium counts them together. +Ask MonetizeMore what it offers below Premium. [Publift](/ad-networks/publift) also qualifies sites on ad revenue, with a lower bar. [Mediavine](/ad-networks/mediavine) uses last calendar year's ad revenue. ## What should you ask before you sign? -Your exact share, pay day, payment minimum, and how much notice you need to leave. None of these are on the Premium page. Ask whether you can keep other ad partners. - -## How can you check if a site uses MonetizeMore? - -Look for MonetizeMore in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +1. What's your exact share, and when are you paid? +2. What's the payment minimum? +3. Can you keep your other ad partners? +4. How much notice ends the contract? diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/monetizemore-pubguru/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/monetizemore-pubguru/intro.mdx index 2e68b199..3b58de4c 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/monetizemore-pubguru/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/monetizemore-pubguru/intro.mdx @@ -1 +1 @@ -MonetizeMore manages ads for publishers, and PubGuru is its ad platform. PubGuru Premium suits sites that already earn well from ads or get heavy traffic. +MonetizeMore is a managed ad optimization company, and PubGuru is the platform it runs your ads on. Its Premium tier suits large sites and multi-site portfolios that already earn well from ads and want price floors, header bidding, and testing handled for them. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/monetizemore-pubguru/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/monetizemore-pubguru/joining.mdx index 4104123a..d7a42c99 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/monetizemore-pubguru/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/monetizemore-pubguru/joining.mdx @@ -1,3 +1 @@ -PubGuru Premium needs either $5,000 in monthly ad revenue or 2 million monthly pageviews across your sites. MonetizeMore's FAQ mentions only the revenue rule, but the Premium page gives both. - -You start by contacting MonetizeMore. The Premium page doesn't list a location rule. +Contact MonetizeMore from the [PubGuru Premium page](https://www.monetizemore.com/solutions/pubguru-premium/). You need one of the two figures, not both, and the page counts them across your sites. These rules are for Premium, not every MonetizeMore service. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/monetizemore-pubguru/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/monetizemore-pubguru/pay.mdx index 576ff8b0..92a66773 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/monetizemore-pubguru/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/monetizemore-pubguru/pay.mdx @@ -1,7 +1,3 @@ ## How does MonetizeMore pay? -MonetizeMore works on a performance-based revenue share that it sets for each publisher. It doesn't publish the Premium rate. - -The payment schedule, minimum, methods, and currency are not public. - -MonetizeMore's Traffic Cop product has its own payment terms, which don't cover PubGuru. +The rate, schedule, and minimum are agreed in your contract. MonetizeMore's Traffic Cop product has its own payment terms, which don't cover PubGuru. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/monetizemore-pubguru/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/monetizemore-pubguru/rules.mdx index 78a36584..ac060228 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/monetizemore-pubguru/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/monetizemore-pubguru/rules.mdx @@ -1,3 +1,3 @@ ## What rules does PubGuru Premium set? -Not public. Contract terms, exclusivity, placement limits, and notice aren't on the product page. +They're set in each publisher's agreement. PubGuru can work with your existing Google Ad Manager and demand partners, so ask whether any must go, how long the contract runs, and what notice ends it. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/article.mdx index 2fbdbd34..ce5b40df 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/article.mdx @@ -1,23 +1,15 @@ ## Is Monumetric a fit for a new blog? -It can be, if you write in English and your readers are mainly in the US, UK, Canada, or Australia. Propel is its program for smaller sites, and its pageview bar is lower than most managed networks that publish one. +Yes, once your traffic has held steady for three months, most readers are in the four countries, and you're on WordPress or Blogger. Budget for the implementation fee, and make sure your layout has room for six ads. -## Who won't Monumetric take? +## What does one blogger's start look like? -Sites with most readers outside those four countries, sites not in English, and sites with porn, drugs, hate speech, or copied content. +The personal finance blog Perfection Hangover [reported](https://perfectionhangover.com/5-financial-adjustments-to-make-if-youve-been-laid-off-from-work/) reaching 10,000 monthly pageviews in its fourth month but applying around month 12. Its first Monumetric month, February 2019, earned $436. That's one older report, not a forecast. -## When does Monumetric pay you? +## Who won't Monumetric take? -A couple of months after you earn it, early in the month. Small balances carry over until they pass the minimum. +Sites with most readers outside the US, UK, Canada, and Australia, sites not in English, and sites with porn, drugs, hate speech, or copied content. ## How does Monumetric compare with Raptive and Journey? -[Journey by Mediavine](/ad-networks/journey-by-mediavine) has a lower bar, 1,000 premium sessions a month. [Raptive](/ad-networks/raptive) asks for more pageviews but publishes a 75% share and pays on Net 45. Monumetric doesn't publish its share. - -## What should you ask before you sign? - -Your share, whether Monumetric must be your only ad partner, and how much notice you need to leave. None of these are on its public pages. - -## How can you check if a site uses Monumetric? - -Look for Monumetric in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +[Journey by Mediavine](/ad-networks/journey-by-mediavine) has a lower traffic bar, but asks you to run its Grow plugin. [Raptive](/ad-networks/raptive) asks for more pageviews but publishes its share and pays sooner. Monumetric doesn't publish its share. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/intro.mdx index 696594c3..72629b4c 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/intro.mdx @@ -1 +1 @@ -Monumetric is a managed ad service for English-language sites. Its Propel program suits smaller blogs that are starting to grow. +Monumetric runs ads for English-language blogs, from small personal finance, food, and travel sites to large ones, with a separate program for each size. Its Propel program is one of the few managed options for a small blog, though it charges a one-time implementation fee. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/joining.mdx index f3c1ea47..d02ed1f8 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/joining.mdx @@ -1,3 +1,3 @@ -Your content must be in English, and at least 50% of your traffic must come from the US, UK, Canada, or Australia. Monumetric won't take content that harms its brand, such as porn, drugs, hate speech, or copyrighted material. +Apply on the [get started page](https://www.monumetric.com/get-started/). Propel's range has to hold for three months in a row, and larger sites go into Monumetric's higher programs, listed in its [program overview](https://www.monumetric.com/monumetric-program-overview/). -You apply through its program page. +[Propel's setup rules](https://www.monumetric.com/requirements-for-the-propel-program/) matter as much as traffic: a site on another platform, or without room for six ads, won't fit. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/pay.mdx index c2d2dc68..da8b89e9 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/pay.mdx @@ -1,5 +1,3 @@ ## How does Monumetric pay? -Monumetric pays on Net 60, within the first ten business days of the month. If your balance is under the minimum, it rolls into the next month. - -US publishers are paid by direct deposit, and international publishers by PayPal. The share and currency are not public. +A balance under the minimum rolls into the next month. The share isn't published. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/rules.mdx index a34a48e1..e9e1fe00 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/rules.mdx @@ -1,3 +1,3 @@ ## What rules does Monumetric set? -Not public. Exclusivity, ad layout controls, contract length, and notice aren't on its eligibility or payment pages. +Monumetric manages your ad placements, and Propel needs six ad slots on desktop and mobile. Ask whether other ad partners can stay and what notice ends the agreement. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/service.mdx index fbe4acb0..694dab58 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/monumetric/service.mdx @@ -1,3 +1,3 @@ ## What does Monumetric do for you? -Monumetric manages and tunes your ads for you. Dashboard and support details are not public. +Monumetric places, manages, and tunes your ads, and moves your site to a larger program as your traffic grows. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/article.mdx index d3871d75..0b27ef02 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/article.mdx @@ -1,28 +1,22 @@ ## Which Newor Media program fits your site? -Start with Elevate if your site is new, since it has no stated traffic bar. Catapult and Premier are for sites with more US traffic. +Elevate if your site is small or new, since it has no pageview floor. Catapult and Premier are for sites with more US traffic. + +## Does no minimum mean easy approval? + +No. Manual review still turns sites down. In October 2026, one publisher [wrote on Reddit](https://www.reddit.com/r/adops/comments/1vkm7no/skip_newor_media_by_any_means_possible/) that two blogs of about 10,000 monthly sessions each were rejected by Newor after AdSense and Journey accepted them, and another commenter reported a rejection at about 40,000. Neither gave a reason, so treat these as signs the review is real, not a hidden cutoff. ## What should you have ready before you apply to Elevate? 1. An English-language site with a navigation bar. 2. Room for at least two ads on each page. 3. Your own Google Ad Manager account. -4. Content that follows Google's ad policies. - -Newor Media usually replies within 24 to 48 hours. That's when you hear back, not a promise of approval. +4. A plan to remove other display networks. ## Can you run other ads with Newor Media? -Not other display networks on Elevate, which is exclusive. If you run [Google AdSense](/ad-networks/google-adsense) or another network now, plan to remove it. Read the agreement for your program before you add partners. - -## How do you leave Newor Media? - -The platform agreement starts with a 90-day term, then renews. Give written notice at least 14 days before the term ends, or you roll into the next one. +Not other display networks. If you run [Google AdSense](/ad-networks/google-adsense) or another network now, it has to come off when Newor starts. ## What if you don't want an exclusive deal? -[Journey by Mediavine](/ad-networks/journey-by-mediavine) and [Monumetric](/ad-networks/monumetric) also take smaller sites, and neither states an exclusivity rule on its public pages. Ask to be sure. - -## How can you check if a site uses Newor Media? - -Look for Newor Media in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +Compare [Journey by Mediavine](/ad-networks/journey-by-mediavine) and [Monumetric](/ad-networks/monumetric), which also serve smaller sites. Ask each one which existing ads must come off before you sign. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/intro.mdx index 8f70ef9f..66e46467 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/intro.mdx @@ -1 +1 @@ -Newor Media runs ads for English-language sites on Google Ad Manager. New sites start on Elevate, its entry program, and move up to Catapult and Premier as they grow. +Newor Media runs all the display ads on English-language sites through Google Ad Manager, in three programs that grow with your US traffic. Its entry program, Elevate, has no pageview minimum, so it suits smaller sites willing to give Newor every display slot. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/joining.mdx index 419e56f0..874be1c6 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/joining.mdx @@ -1,3 +1,3 @@ -Elevate, the entry program, has no stated pageview minimum. Your site must be in English, have a navigation bar, follow Google's ad policies, and have room for at least two ads per page. You need Google Ad Manager. Newor also looks at where your visitors come from, but doesn't set a country mix. +Start with the [Elevate FAQ](https://newormedia.com/elevatefaqs) and Newor's [program page](https://newormedia.com/programs). No pageview minimum still means a manual review, and exclusivity is part of the deal from day one. -The stated wait is how soon Newor usually replies, not a promise of approval. The larger programs, Catapult and Premier, set US pageview minimums. +If your site isn't in English, get Newor's answer in writing before you apply. The current FAQ and a 2025 Newor blog post disagree. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/pay.mdx index 863c7567..19953d29 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/pay.mdx @@ -1,5 +1,3 @@ ## How does Newor Media pay? -The payment FAQ says Net 30, but the platform agreement says Net 45. If you've signed the agreement, its terms are the ones that count. - -Payment is in US dollars. The share and minimum are not public. +If you've signed the platform agreement, its Net 45 counts over the FAQ's Net 30. You're paid in US dollars. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/rules.mdx index e995137d..06e0a561 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/rules.mdx @@ -1,5 +1,5 @@ ## What rules does Newor Media set? -The Elevate program is exclusive. The platform agreement starts with a 90-day term, then renews. To leave, give written notice at least 14 days before the term ends. +Newor must be your only display ad seller. You can't run other networks or sell display ads directly on the same site during the term. -OTT inventory is handled separately and isn't exclusive. Some premium private marketplace deals do need exclusive inventory. Your content must follow Google's policies. +The platform agreement starts with a 90-day term, then renews. To leave, give written notice at least 14 days before the term ends. Your content must follow Google's policies. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/service.mdx index 21a2062d..9c4f12f2 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/newor-media/service.mdx @@ -1,3 +1,3 @@ ## What does Newor Media do for you? -The dashboard shows real-time reports. Support is by ticket, and Newor aims to reply within 24 hours. +Newor runs your ads in your Google Ad Manager account. The dashboard shows real-time reports, and ticket support aims to reply within 24 hours. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/article.mdx index 445b601f..7a61d25f 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/article.mdx @@ -1,23 +1,11 @@ ## Who is NitroPay a fit for? -Publishers who want their money fast. NitroPay reviews your traffic, where your visitors are, and your niche, but it doesn't publish a traffic minimum or a list of accepted regions. +Gaming, enthusiast, and interactive sites with real traffic and clean content, run by someone comfortable adding ad tags and a Google Ad Manager link. App-only publishers should look elsewhere for now. ## How fast does NitroPay pay? -Faster than most networks on this list. Its docs describe payment about a week after the month, with no minimum beyond the transaction fee. Many managed networks here pay on Net 60, such as [Monumetric](/ad-networks/monumetric) and [Playwire](/ad-networks/playwire). +Faster than almost any network here. [Monumetric](/ad-networks/monumetric) and [Playwire](/ad-networks/playwire) wait about two months. Fast pay helps a small publisher's cash flow, but it says nothing about how much you'll earn. -## How long should you test NitroPay? +## What do publishers report earning? -NitroPay recommends a testing period of a few months before you judge results. Compare its results with what you earned before, over a similar stretch of time. - -## What should you ask before you sign? - -Your base share, contract length, and how much control you keep over ad placement. None of these are in its public docs. - -## Does NitroPay pay bonuses? - -Its bonus page lists share increases for some agreements. That's on top of the base share, not the starting rate, so ask whether you'd qualify. - -## How can you check if a site uses NitroPay? - -Look for NitroPay in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +Results vary a lot. One gaming download site [reported on Reddit](https://www.reddit.com/r/adops/comments/1vep1yo/gaming-site-getting-133-ad-revenue-despite-600k/) in mid-2026 about 600,000 pageviews in 30 days, mostly from Europe, and $133 from NitroPay. That's one site with few US readers, not a typical rate. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/intro.mdx index c0e85b9b..04b211ca 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/intro.mdx @@ -1 +1 @@ -NitroPay is an ad platform for website publishers that pays out quickly after each month. +NitroPay runs display ads for independent websites, especially gaming and enthusiast sites and web apps, and pays within days of each month ending. It reviews every site by hand, so it suits publishers who can share analytics and handle a Google Ad Manager link. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/joining.mdx index 24c585a6..7588083f 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/joining.mdx @@ -1,3 +1,3 @@ -NitroPay reviews how much traffic you have, where your visitors are, and what your site covers. It doesn't publish a traffic minimum or a list of accepted regions. Its guidelines bar adult, illegal, violent, and infringing content. +Apply on the [NitroPay publisher page](https://nitropay.com/publishers/). Its [docs](https://nitropay.com/docs/) say reviewers look at your pageviews, sessions, visitor countries, and niche, and that giving GA4 access can speed things up. There's no published traffic number. The [publisher guidelines](https://blog.nitropay.com/guidelines/) cover banned content. -Once your site is accepted, you add Nitro's ad tags and link your Google Ad Manager account through Google MCM, Google's program for letting a partner sell your ads. Giving NitroPay access to your GA4 data can speed up review. You go live once enough ad buyers are set up for your site. +The go-live time counts from acceptance, while NitroPay sets up enough ad buyers for your site. It isn't the review time. NitroPay doesn't support mobile apps right now. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/pay.mdx index 58b26c67..7f63d48c 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/pay.mdx @@ -1,5 +1,3 @@ ## How does NitroPay pay? -NitroPay pays early each month, with no minimum as long as your earnings cover the transaction fee. It pays by local bank transfer in many countries, such as ACH in the US or SEPA in Europe, and by wire elsewhere. Its docs list which currency goes with some of these methods. The base share is not public. - -A separate bonus page lists share increases for some agreements. That's a bonus, not the starting share. +Seven days after the start of each month, with no set minimum as long as your earnings cover the transaction fee. Most countries get a local bank transfer, and others a SWIFT wire. The base share isn't published. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/rules.mdx index 57c07b0b..6f9cbde8 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/rules.mdx @@ -1,3 +1,3 @@ ## What rules does NitroPay set? -Not public. Contract terms and how much control you have over ads and layout aren't in its public docs. +Ask whether NitroPay must be your only programmatic ad partner. Direct ad sales and affiliate placements may be able to stay. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/service.mdx index 453bf3f8..d414be62 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/nitropay/service.mdx @@ -1,3 +1,3 @@ ## What does NitroPay do for you? -You can reach its success team by email or through the chat in your dashboard. NitroPay suggests a 90-day testing period. Full dashboard and report details aren't in its public docs. +NitroPay runs your ad tags and sells your ad space through Google MCM and other ad exchanges. It works for normal sites and single-page web apps. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/article.mdx index 83851aba..2c6a4ac0 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/article.mdx @@ -1,19 +1,11 @@ -## Who is Opti Digital for? +## Who is Opti Digital a fit for? -Publishers who want a partner to run Google Ad Manager. Its fit rules aren't public, so ask its team. +Publishers and media groups that already use Google Ad Manager and want a partner to run it or add demand. A small blog without Ad Manager isn't the target. -## What's the difference between Managed Inventory and Managed Account? +## Managed Inventory or Managed Account? -Both are ways Opti Digital runs your Google Ad Manager setup. They're separate commercial deals with different payment timing. With Managed Account, Google pays its share of revenue on its own schedule, so your money comes in two streams. +Managed Inventory hands your ad space to Opti Digital, which collects and pays you. Managed Account keeps your own Google relationship, so Google pays you directly and Opti Digital pays for its share of demand. It suits a publisher who wants Google revenue to keep arriving directly. -## Which setup gets you paid sooner? +## Can Demand Hub sit next to your current setup? -Managed Inventory pays on Net 45. Managed Account pays Net 60 for the demand Opti Digital handles. Your order sets the exact terms. - -## What should you ask before you sign? - -Your share, the payment minimum, and how you're paid. Ask whether Opti Digital must be your only ad partner, and how much notice you need to leave. None of this is on its help pages. - -## How can you check if a site uses Opti Digital? - -Look for Opti Digital in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +It's built to add demand, as in Opti Digital's [1XL case study](https://optidigital.com/resources/case-studies/how-1xl-unlocked-incremental-premium-demand-with-opti-digital/). Ask how it overlaps with your existing bidders before you switch it on. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/intro.mdx index 72ba0df0..1b075a64 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/intro.mdx @@ -1 +1 @@ -Opti Digital is a monetization platform that manages Google Ad Manager setups for publishers. It offers two setups, and each pays on different terms. +Opti Digital runs Google Ad Manager setups for publishers, media groups, and sales houses, and can add extra demand on top. It's sold through a review of your current setup, so it suits publishers who already run Ad Manager. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/joining.mdx index 4d1221f7..ad724f55 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/joining.mdx @@ -1 +1,3 @@ -Opti Digital doesn't publish a traffic minimum, site rules, regions, or an application checklist. Contact its team to talk about fit. +Ask for a review on the [Opti Digital request page](https://optidigital.com/request-demo/). There's no general sign-up checklist or traffic number. + +Its [refer-a-publisher page](https://optidigital.com/refer-a-publisher/) lists conditions such as three months of live tags, eligible countries, and three ads per page. Those only decide whether a referral earns a bonus. They aren't the entry rules for everyone. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/pay.mdx index 18e7bd9a..988d8464 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/pay.mdx @@ -1,7 +1,3 @@ ## How does Opti Digital pay? -Opti Digital works on a revenue share, but the rate is not public. When you're paid depends on your setup. - -With Managed Inventory, Opti Digital pays on Net 45. With Managed Account, it pays Net 60 for the demand it handles, and Google pays its own revenue on its 25-day cycle. Your order sets the exact terms. - -The minimum, methods, and currency are not public. +It depends on the setup. With Managed Inventory, Opti Digital collects everything and pays you. With Managed Account, it pays for the demand it brings, and Google pays its own revenue to you directly, so money comes in two streams. Its share is of gross programmatic revenue, and the rate isn't published. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/rules.mdx index 7675e79f..95857e3d 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/rules.mdx @@ -1,3 +1,3 @@ ## What rules does Opti Digital set? -Not public. Exclusivity, content rules, contract length, and notice aren't on its help pages. Managed Inventory and Managed Account are different commercial deals, so read the terms for yours. +They're set in your order. Managed Inventory and Managed Account are different deals, so read the terms for yours, including notice to leave. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/service.mdx index 8304b2e5..e3afa351 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/opti-digital/service.mdx @@ -1,3 +1,3 @@ ## What does Opti Digital do for you? -The publisher knowledge base explains how payment flows, and invoices are created for you. Dashboard reports and support levels are not public. +Opti Digital runs and tunes your Google Ad Manager setup. Its Demand Hub adds extra buyers, including private deals, and needs a consent tool, ads.txt lines, and bidder setup. Invoices are created for you. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/playwire/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/playwire/article.mdx index d10627df..967e67d4 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/playwire/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/playwire/article.mdx @@ -1,26 +1,15 @@ ## Who is Playwire a fit for? -Established sites and apps with original content, clean traffic, and readers in English-speaking countries. It suits a publisher ready to hand all ad slots to one partner. +Gaming sites, casual game portals, education and tool sites, entertainment, and travel, with original content and low invalid traffic. Apps and desktop games can apply too. -## How much traffic do you need for Playwire? +## Is 100,000 or 500,000 pageviews the real bar? -At least 500,000 monthly pageviews, or 1,000 daily active users for an app. Its qualification guide gives other numbers, but those are advice on when Playwire pays off, not the entry rule. Quality matters too: it checks invalid traffic and your ad setup. +The FAQ's number is the stated rule. The 100,000 figure is Playwire's view of when it starts paying off. If you're between the two, ask, but don't expect approval. -## What should you have ready before you apply? +## What do publishers report? -1. HTTPS and a privacy policy on your site. -2. Room for at least three ads per device. -3. Invalid traffic at or below Playwire's limit. -4. A clean record with Google and major ad providers. - -## Can you run other networks with Playwire? - -No. Playwire says other ad network tags can't run with its script. Plan to move your ad slots over to it. +Mixed results near a million pageviews. In an [October 2026 Reddit thread](https://www.reddit.com/r/adops/comments/1wp5uz8/), one commenter with about a million monthly pageviews and 10% US traffic said Playwire worked well. Another, at a similar size with 25% US traffic, said they'd just been rejected. Neither gave the reason, so country share alone doesn't explain it. ## What fits if you're below Playwire's traffic? -[Raptive](/ad-networks/raptive) and [Monumetric](/ad-networks/monumetric) take smaller sites with a large share of readers in the US and a few other English-speaking countries. [Journey by Mediavine](/ad-networks/journey-by-mediavine) starts at 1,000 premium sessions a month. - -## How can you check if a site uses Playwire? - -Look for Playwire in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +[Raptive](/ad-networks/raptive) and [Monumetric](/ad-networks/monumetric) take smaller sites with most readers in the US and a few other English-speaking countries. [Journey by Mediavine](/ad-networks/journey-by-mediavine) starts at 1,000 Tier 1 sessions in 30 days. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/playwire/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/playwire/intro.mdx index e6568ee6..2a0d774d 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/playwire/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/playwire/intro.mdx @@ -1 +1 @@ -Playwire is a managed ad service for web publishers and apps. It suits established sites with original content and clean traffic. +Playwire runs ads for big websites, mobile apps, and games, with gaming, education, and entertainment among its strongest niches. It takes over your ad setup completely, so it suits established publishers ready to hand all their ads to one partner. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/playwire/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/playwire/joining.mdx index c80e318c..24f5ca14 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/playwire/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/playwire/joining.mdx @@ -1,3 +1,5 @@ -Playwire's FAQ sets the traffic bar, with a separate one for apps. Its qualification guide gives other numbers, but those are advice on when Playwire pays off for you, not the entry rule. It looks for a good share of readers in English-speaking countries. More US traffic tends to earn more, but there's no US minimum. +Playwire publishes two different traffic numbers for two different jobs. Its [FAQ](https://www.playwire.com/faq) sets the entry rule shown here, measured in Google Analytics. Its [qualification guide](https://www.playwire.com/qualification-criteria) suggests applying from about 100,000 monthly pageviews to get the full benefit. That's advice, not a confirmed lower entry rule. -You also need original content, invalid traffic at or below 7%, a privacy policy, HTTPS, and room for at least three ads per device. Apply through Playwire's onboarding form. +The same guide links at least 20% US traffic to higher revenue. It's not a requirement. The FAQ also asks for a secure (HTTPS) privacy policy page and room for at least three highly viewable ads on each device. + +The [apply page](https://www.playwire.com/apply) splits into websites, mobile apps, and desktop apps. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/playwire/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/playwire/pay.mdx index 73de84ff..b7a40d16 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/playwire/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/playwire/pay.mdx @@ -1,3 +1,3 @@ ## How does Playwire pay? -Playwire pays monthly on Net 60 terms, in US dollars. You get a share of net revenue, and it's higher for ads sold through other buyers than for ads Playwire sells directly. The payment minimum and methods are not public. +Your share depends on who sold the ad: the lower rate is for ads Playwire's own team sells directly, and the higher one for ads sold through other buyers. Both are shares of net revenue, paid in US dollars. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/playwire/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/playwire/rules.mdx index 05150f16..bfb2d293 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/playwire/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/playwire/rules.mdx @@ -1,3 +1,3 @@ ## What rules does Playwire set? -Playwire suggests ad layouts, but you have the final say. You can't run other ad network tags alongside the Playwire script. Contract length and notice are not public. +Playwire recommends ad placements, but you have the final say. You can keep your AdSense or Ad Exchange account, but it can't run on your site alongside Playwire's script. Ask about any other network you use. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/playwire/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/playwire/service.mdx index 4fba3dd6..0a7e96f5 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/playwire/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/playwire/service.mdx @@ -1,3 +1,3 @@ ## What does Playwire do for you? -You get a dashboard, campaign tracking, and dedicated teams for publisher success, yield, and technical support. +Partner success staff watch your site, a yield team tunes your setup, and engineers handle technical questions. Dashboards show traffic and CPM data. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/article.mdx index e98643f8..75f500d4 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/article.mdx @@ -1,23 +1,11 @@ -## Is PubFuture a fit for a small site? +## Who is PubFuture a fit for? -Not a very small one. A 2025 PubFuture case study names 100,000 pageviews a month as its minimum. Its current pages don't list entry rules, so ask through its sign-up page if you're unsure. +HTML5 game sites and other gaming publishers past the pageview floor. Its public examples are about game sites, so a general blog has less to go on. -## How does PubFuture pay compare? +## What do PubFuture's case studies show? -Net 30 with a $50 minimum, which is quicker than the Net 60 many managed networks use. You can be paid by PayPal, Payoneer, bank transfer, or Bitcoin. +A 2025 [case study about an HTML5 game site](https://blog.pubfuture.com/the-secret-to-400-more-revenue-for-h5-game-sites-pubfutures-winning-formula/1007/) reports a large revenue increase for one game site. It's PubFuture's own report about one site, not what yours should expect. -## Can you control which ads PubFuture shows? +## What else should game sites compare? -Yes. PubFuture says you can block ads you don't want. - -## How quickly will you get help? - -PubFuture says its ad operations team replies within 24 hours. - -## What should you ask before you sign? - -Your share, whether PubFuture must be your only ad partner, and how much notice you need to leave. None of these are public. - -## How can you check if a site uses PubFuture? - -Look for PubFuture in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +[Playwire](/ad-networks/playwire), [Venatus](/ad-networks/venatus), and [NitroPay](/ad-networks/nitropay) also focus on gaming publishers. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/intro.mdx index e9436ae5..bb2f1972 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/intro.mdx @@ -1 +1 @@ -PubFuture is a header bidding and ad monetization service for publishers. Its traffic minimum comes from a 2025 PubFuture case study, not a rules page. +PubFuture runs ads for web publishers, with a focus on HTML5 game sites and other interactive pages. Its FAQ sets a monthly pageview floor, so it suits game publishers with steady traffic who want a specialist. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/joining.mdx index 173137fe..6967e701 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/joining.mdx @@ -1 +1,3 @@ -The traffic minimum comes from a 2025 PubFuture case study, not a current rules page. Accepted regions and a full content checklist aren't public. You apply through its sign-up page. +The [PubFuture FAQ](https://pubfuture.com/home) asks for at least 100,000 pageviews a month and safe content with no nudity. Once approved, you add PubFuture's lines to your ads.txt file. + +Create a publisher account on the [sign-up page](https://ssp.pubfuture.com/auth/signup), then submit your site for review. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/pay.mdx index f80164fb..58ec7453 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/pay.mdx @@ -1,3 +1,3 @@ ## How does PubFuture pay? -PubFuture pays on Net 30 terms once you pass the minimum. Its revenue share is not public. +On Net 30, so January's earnings are paid by the end of February. The share isn't published, so confirm it in your account terms. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/rules.mdx index fefac70d..18568492 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/rules.mdx @@ -1,3 +1,3 @@ ## What rules does PubFuture set? -You can block ads you don't want. Exclusivity, content rules, contract length, and notice are not public. +PubFuture doesn't publish its contract terms. Ask whether it replaces your current ads or runs alongside them, and what notice ends the deal. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/service.mdx index 740f199d..28540794 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubfuture/service.mdx @@ -1,3 +1,3 @@ ## What does PubFuture do for you? -An ad operations team supports you, and PubFuture says it replies within 24 hours. It tunes your ads and sends reports. +PubFuture runs and tunes the ads on your site, with an emphasis on game pages, and sends you reports. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/article.mdx index 8b9a9ff8..751ec772 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/article.mdx @@ -1,19 +1,11 @@ ## Is PubGalaxy still running? -Not under its own name. Azerion bought PubGalaxy in 2021 and moved its publisher services under the Improve Digital name in September 2026. The pubgalaxy.com site now opens Improve Digital's site, so new publishers start there. Sites that already run PubGalaxy still name it in their ads.txt files, so we keep listing them here. +Not under its own name. Its owner Azerion [announced on September 23, 2026](https://www.azerion.com/azerion-unifies-its-publisher-supply-business-under-improve-digital-launching-a-full-circle-solution-for-publishers/) that its publisher business now sits under Improve Digital. Some sites still name PubGalaxy in their ads.txt files, so we keep listing them. -## What does it take to join now? +## Which Improve Digital product replaces it? -Its current joining rules aren't public. The old guide moved to Improve Digital's site, so ask Improve Digital about traffic and content rules before you apply. +It depends on who runs your ads. Pick Yield if you want a managed service that takes over your ad setup. Pick the SSP if you run your own setup and want extra buyers. -## Do PubGalaxy's old pay terms still apply? +## Can you still compare PubGalaxy's terms? -Not for certain. Its old terms set one minimum share for ads sold through its ad partners and a lower one for direct deals. Improve Digital's pages don't confirm either for new publishers, so ask for the terms you'd get. - -## What do you give up with PubGalaxy? - -Under its old terms, you let it manage your ad inventory, and it could make changes to improve the reader experience. If you want full control of your layout, ask what you can still decide. - -## How can you check if a site uses PubGalaxy? - -Look for PubGalaxy in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +Not usefully. Its old pay terms and traffic rules belong to the retired service. Ask Improve Digital for the terms you'd actually get. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/intro.mdx index f06d634a..faec57ca 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/intro.mdx @@ -1 +1 @@ -PubGalaxy was an ad revenue service that reviewed each publisher one by one. In September 2026, its owner Azerion moved it under the Improve Digital name, and pubgalaxy.com now opens Improve Digital's site. Its current joining rules and pay terms aren't public. +PubGalaxy no longer takes publishers under its own name. In September 2026, its owner Azerion moved PubGalaxy's publisher business into Improve Digital, so this page tracks sites that still list PubGalaxy and points new publishers to Improve Digital. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/joining.mdx index aef9c4d7..ba94d59b 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/joining.mdx @@ -1 +1,6 @@ -PubGalaxy's old joining rules may not apply since its move to Improve Digital, and Improve Digital's pages don't list rules for new publishers. Ask Improve Digital about traffic and content rules before you apply. +There's no PubGalaxy application any more. The old publisher page now opens [Improve Digital](https://improvedigital.com/), which has separate access requests for two products: + +- **Improve Digital Yield**, a managed service that runs your ads for you. +- **Improve Digital SSP**, for publishers who run their own ad setup and want more demand. + +Improve Digital doesn't publish entry rules for either. Applying there is a new application, not a PubGalaxy one. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/pay.mdx index 8ae009ec..b584f088 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/pay.mdx @@ -1,3 +1,3 @@ ## How does PubGalaxy pay? -Not public. PubGalaxy's old pay terms may not apply since its move to Improve Digital, and Improve Digital's pages don't confirm them for new publishers. Ask Improve Digital for the share, pay day, and payment minimum you'd get. +Existing PubGalaxy accounts follow the agreement they moved over with. PubGalaxy's old public pay terms don't carry over to new Improve Digital publishers, and Improve Digital doesn't publish its own. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/rules.mdx index c1cd8f78..9a7cf247 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/rules.mdx @@ -1,3 +1,3 @@ ## What rules does PubGalaxy set? -PubGalaxy's old terms had you own or license your content and let it manage your ad inventory. Since the move to Improve Digital, the current rules aren't public. Check exclusivity and notice in the order you sign. +None for new publishers, since the standalone brand is retired. If you apply to Improve Digital, read its order for exclusivity and notice. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/service.mdx index 01225cfc..ca58f396 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubgalaxy/service.mdx @@ -1,3 +1,3 @@ ## What does PubGalaxy do for you? -PubGalaxy offered detailed earnings reports and access to direct and private marketplace deals. Ask Improve Digital what new publishers get now. Support response times are not public. +Nothing new, as a standalone brand. Its publisher services now run under Improve Digital. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/publift/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/publift/article.mdx index 55a87e6b..b3ea105d 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/publift/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/publift/article.mdx @@ -1,23 +1,11 @@ ## Who is Publift a fit for? -Sites that already earn steadily from ads. Publift works best when most readers are in the Americas, Europe, or Australia and New Zealand, though it doesn't call that a hard cutoff. Your traffic should be steady and genuine, and your content useful and safe. +Sites already earning real money from ads, in any niche, with mostly Western or Australian readers. A site with fewer pageviews but strong earnings can fit better than a big one that earns little. -## Does Publift care more about revenue or traffic? +## Should you trust a Publift revenue forecast? -Revenue. Publift uses monthly ad revenue as its main test and treats pageviews as a hint. A site with fewer pageviews but strong earnings can still fit. - -## What should you have ready before you apply? - -Your recent monthly ad earnings and traffic numbers. Since revenue comes first, have your earnings reports ready to show. - -## What should you confirm in your order? - -Your share, whether the service is month to month, and any exclusivity or layout rules. Publift's 2026 comparison describes an 80/20 split and month-to-month service, but the requirements page doesn't, so get both in writing. +Treat it as a sales estimate. In an [October 2026 Reddit thread](https://www.reddit.com/r/adops/comments/1wp5uz8/), a gaming site with about 1.4 million monthly pageviews said Publift quoted $4,000 to $10,000 a month, and the owner questioned it. Compare your current actual revenue instead. ## Where else can a global site go? -[Clickio](/ad-networks/clickio) sets its traffic bar by visitor region. [Google AdSense](/ad-networks/google-adsense) has no traffic minimum. - -## How can you check if a site uses Publift? - -Look for Publift in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +[Clickio](/ad-networks/clickio) sets its traffic guide by visitor region. [Google AdSense](/ad-networks/google-adsense) has no traffic number to hit. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/publift/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/publift/intro.mdx index 1fdbf381..85a2e06f 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/publift/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/publift/intro.mdx @@ -1 +1 @@ -Publift is a managed ad service built on its Fuse platform. It qualifies sites by ad revenue first, so it suits sites that already earn steadily. +Publift runs ads for websites as a managed service and judges you on what your ads already earn, not just your traffic. It suits established sites with real ad revenue, and fast-growing smaller sites can still ask for a review. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/publift/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/publift/joining.mdx index df882f92..1d01a53e 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/publift/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/publift/joining.mdx @@ -1,5 +1,3 @@ -Publift looks at your monthly ad revenue first. Pageviews are a secondary signal, not a strict rule. Your traffic should be steady and genuine, and your content useful and safe. +Publift's [requirements guide](https://www.publift.com/blog/publift-requirements), updated in October 2026, makes monthly ad revenue the main test. Pageviews are a secondary signal, not a minimum. Sites below the revenue line that are growing fast are invited to get in touch. -Publift works best when most of your readers are in the Americas, Europe, or Australia and New Zealand. It doesn't call that a strict cutoff. - -You apply for a site review. Publift gives a time for sending your ad tags, but it doesn't say how much of that is the review itself. +Publift says it [works best](https://www.publift.com/how-it-works) when most readers are in the Americas, Europe, or Australia and New Zealand, without calling that a cutoff. You start on the [Let's talk form](https://www.publift.com/lets-talk), which asks for your monthly revenue, pageviews, and where most traffic comes from. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/publift/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/publift/pay.mdx index b285d94a..2832d799 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/publift/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/publift/pay.mdx @@ -1,5 +1,3 @@ ## How does Publift pay? -Publift's comparison page lists payment by direct bank transfer, with Google revenue on Net 30 and other network revenue on Net 90. That page is marketing content, so confirm the currency and terms in your order. - -Publift's 2026 comparison also describes the revenue split. It isn't on the requirements page, so confirm it in your order. +Google revenue pays on Net 30 and other network revenue on Net 90, by bank transfer. The split, timing, and minimum come from Publift's 2026 comparison posts, not a contract, so confirm them in your order. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/publift/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/publift/rules.mdx index e9e22070..4cc4834f 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/publift/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/publift/rules.mdx @@ -1,3 +1,3 @@ ## What rules does Publift set? -The requirements page doesn't state exclusivity, layout control, banned topics, contract length, or notice. A Publift blog post describes month-to-month service and a revenue split, but that's general guidance. Confirm both in your order. +Publift runs your main display setup, so plan for it to replace your current managed network. Its public pages don't set contract length, exclusivity, or notice, so get them in your order. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/publift/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/publift/service.mdx index 6ffa8a5f..9fa2a158 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/publift/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/publift/service.mdx @@ -1,3 +1,3 @@ ## What does Publift do for you? -The Fuse platform tunes your ads and reports on them. Publift says you get a dedicated account management team. +Publift places and tunes your ads for you and reports on the results. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/publir/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/publir/article.mdx index 3cc94f34..f166fae7 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/publir/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/publir/article.mdx @@ -1,23 +1,13 @@ ## Who is Publir a fit for? -Sites of any size, since it has no traffic or revenue minimum. It suits publishers who want more than ad slots, such as ad block recovery, subscriptions, or crowdfunding. +Publications that want readers to pay as well as see ads, such as a news site adding subscriptions or a blog adding crowdfunding. If you only want a bigger ad check, compare managed ad networks first. -## Which Publir model fits you? +## Can you use Publir with another ad network? -Pro suits a site that wants Publir to run its ads for a fee. Custom ad deals under the service agreement work on a revenue split instead. Ask which model you'd be on before you sign. - -## Can Publir change its fees? - -Yes. The service agreement allows Publir to change its percentages for costs and fees. Ask how you'd be told about a change. - -## How long does it take to start? - -The service agreement says onboarding may take ten business days. Plan your switch around that. +For subscriptions, ad block recovery, and crowdfunding, yes. Those can sit on top of your current ads. Its programmatic service serves 100% of the ads it covers, so that part replaces your other ad network. ## What should you ask before you sign? -The payment minimum and how you're paid. Neither is public. - -## How can you check if a site uses Publir? - -Look for Publir in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +1. Which fees come out before your share? +2. What's the payment minimum, and how are you paid? +3. Is the 2024 agreement still the current one? diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/publir/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/publir/intro.mdx index 8a571ac5..e81bf2fc 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/publir/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/publir/intro.mdx @@ -1 +1 @@ -Publir is an ad optimization and audience monetization platform. Its service agreement is non-exclusive, so you can keep your other ad partners. +Publir is a set of money-making tools for online publications: programmatic ads, ad block recovery, subscriptions, crowdfunding, and shopping. It suits publishers who want reader revenue alongside ads, not just another ad tag. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/publir/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/publir/joining.mdx index b2ef1519..a9b693a3 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/publir/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/publir/joining.mdx @@ -1 +1 @@ -Publir has no traffic or revenue limit. It offers Pro and Enterprise plans, and you apply from its pricing page. Location and content rules are not public. +You sign up from the [Publir pricing page](https://publir.com/app/pricing). It lists no traffic limit for its plans, but Publir doesn't publish a full checklist, so that isn't a promise of acceptance. Once in, you install Publir's software and ad tags. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/publir/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/publir/pay.mdx index f305f68a..d3155a9a 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/publir/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/publir/pay.mdx @@ -1,7 +1,3 @@ ## How does Publir pay? -What you keep depends on the service. Pro charges a fee. Under the service agreement, you keep most of your programmatic and subscription revenue, custom ad revenue is split evenly, and Publir takes a fee on crowdfunding. There's no single share for every publisher. - -Programmatic and custom ad earnings are paid at least monthly, on Net 60. Subscription revenue is paid at least monthly. - -The payment minimum, methods, and currency are not public. +It depends on the product. The shares come from Publir's [service agreement](https://publir.com/service_agreement), dated October 2024, and service costs can come out before your share. Crowdfunding works differently: Publir keeps a fee on what readers give. Confirm the current terms before you sign. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/publir/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/publir/rules.mdx index 9686e997..5f2ed6b0 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/publir/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/publir/rules.mdx @@ -1,3 +1,3 @@ ## What rules does Publir set? -The service agreement is non-exclusive, and either side can end it with notice. It also lets Publir change its percentages to cover costs and fees. Content rules and contract length are not public. +The agreement is non-exclusive, and either side can end it with 30 days' notice. Inside its programmatic service, though, Publir serves all the ads, so it replaces your other ad tags there. The 2024 agreement also lets Publir adjust its percentages for costs and fees. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/publir/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/publir/service.mdx index f1f60424..ae8a6b53 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/publir/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/publir/service.mdx @@ -1,5 +1,3 @@ ## What does Publir do for you? -Publir offers ad optimization, ad block recovery, subscriptions, crowdfunding, and QuickShop. Pro support is by email during business hours. Enterprise adds real-time analytics and phone support. - -The service agreement says onboarding can take ten business days. Support runs weekdays from 8 a.m. to 5 p.m. Eastern, with a 12-hour reply target outside those hours. +Publir runs programmatic ads and adds tools for ad block recovery, subscriptions, crowdfunding, and commerce. You can use one module or several. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/article.mdx index 9f828b19..13d22a07 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/article.mdx @@ -1,23 +1,11 @@ ## Who is Publisher Collective a fit for? -Sites that want a team to sell their ads and are happy to hand over the ad tags. Publisher Collective looks for about €300 a day in ad revenue, and 3 million pageviews a month for sites outside its main topics. It may still take a smaller site that's growing fast or high quality. You must own or have rights to your content. +Sites in technology, video games, hobbies and casual games, education, sports, or health. Sites in other niches need far more traffic to be considered. ## What happened to Snigel? -Snigel and Publisher Collective merged in February 2025. Publisher Collective now sells under its own name and keeps Snigel as its ad technology. Many sites still name Snigel's domain, snigelweb.com, in their ads.txt files. We count those sites under Publisher Collective. +Snigel and Publisher Collective combined in 2025. Publisher Collective is the name publishers deal with, and Snigel is the technology behind it. Many sites still name Snigel's domain, snigelweb.com, in their ads.txt files, so we count them here. -## When does Publisher Collective pay you? +## What do you give up? -After the advertiser pays Publisher Collective. The partner terms don't set a fixed interval, so ask how long that usually takes. The €500 minimum is high, so a small site may wait several months for a first payment. - -## What do you give up with Publisher Collective? - -You can't edit its ad tags, and you may need to send advertiser leads its way. Read those terms closely if you also sell ads directly. - -## What do you need to keep up with after you join? - -Replies to Publisher Collective. You may need to update site materials within seven days, and the deal can be suspended or ended if you don't respond. - -## How can you check if a site uses Publisher Collective? - -Look for Publisher Collective or Snigel in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +Your ad sales. The exclusive representation clause, the ban on changing tags, and the duty to pass on leads matter most if you sell any ads yourself. The three-month notice period means switching later takes planning. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/intro.mdx index 4a174ce6..dbda66ce 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/intro.mdx @@ -1 +1 @@ -Publisher Collective is a monetization service and network that sells ads for its publishers. Each publisher signs its own representation agreement. It merged with Snigel in 2025, so we count sites that name Snigel in their ads.txt files here too. +Publisher Collective sells ads for specialist sites in gaming, tech, education, sports, health, and hobbies, with Snigel's ad technology underneath since the two combined in 2025. It takes on your ad sales worldwide, so it suits niche publishers ready for one hands-on partner. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/joining.mdx index 1ec4770b..8cf9b341 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/joining.mdx @@ -1,3 +1,3 @@ -The revenue and pageview bars aren't hard floors. Publisher Collective may still take a smaller site that's growing fast or has high-quality content. +Send an enquiry from the [publisher contact page](https://www.publisher-collective.com/publisher-contact). Its [FAQ](https://www.publisher-collective.com/faq) reviews sites in its core niches one by one, and only sites outside them have a pageview rule. The daily revenue figure is a guide, so a smaller site with strong growth or quality can still be considered. -You must own or have rights to your content, bring real traffic with no bots, and follow its terms. Apply through its publisher contact page, then sign an Advertising Representation Agreement. Once you're in, you add its JavaScript tags to your site. +Content must be original and high quality, with real traffic and no bots. If accepted, you sign an Advertising Representation Agreement and add its JavaScript tags. The setup time counts from signing, not from your application. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/pay.mdx index 8e205e1d..c1b56182 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/pay.mdx @@ -1,5 +1,3 @@ ## How does Publisher Collective pay? -Publisher Collective pays after the advertiser pays it, by bank transfer in GBP, EUR, or USD. Your share is set in your representation agreement. - -A Publisher Collective blog post lists a different share, timing, and minimum. Those conflict with the partner terms, so go by the terms you sign. +Your share and pay day are set in your Advertising Representation Agreement. Under the [partner terms](https://www.publisher-collective.com/partners-terms-conditions), you're paid in pounds, euros, or US dollars once the advertiser has paid. The minimum is high, so a small site may wait months for a first payment. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/rules.mdx index df187b68..44f21f8e 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/rules.mdx @@ -1,5 +1,5 @@ ## What rules does Publisher Collective set? -Discriminatory, weapons, porn, hateful, and indecent content isn't allowed. You may need to update site materials within seven days, you can't change the ad tags, and you may need to pass ad leads to Publisher Collective. +The partner terms give Publisher Collective the exclusive right to sell your ads worldwide. You can't change its ad tags, and you pass advertising leads to it. -It can suspend or end the deal if you don't respond. Exclusivity and contract length are not public. +You make requested site changes within seven days, and failing to reply within seven days can get the deal suspended. After a trial period, leaving takes three months' written notice. Weapons, porn, hateful, discriminatory, and indecent content isn't allowed. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/service.mdx index 2b8f98cf..febaadfd 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/publisher-collective/service.mdx @@ -1,3 +1,3 @@ ## What does Publisher Collective do for you? -Not public. The FAQ points you to apply and sign your own terms, but doesn't describe a dashboard, reports, or support. +A publisher success team contacts you after you apply, an integration engineer helps with setup, and an operations team keeps tuning your ads. It runs header bidding and also sells direct ad deals. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/article.mdx index 99811257..3fc55cb8 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/article.mdx @@ -1,15 +1,11 @@ -## How do you join PubNation? +## Is PubNation still running? -PubNation doesn't publish how to apply. Contact the company through its website. +Not on its own. Mediavine's help center says the migration to Mediavine is complete and PubNation is no longer offered. Some sites still name PubNation in their ads.txt files, so we keep listing them. -## What should you ask PubNation before you sign? +## Does a PubNation acceptance count with Mediavine? -Ask for the share, when you'd be paid, the payment minimum, and whether it must be your only ad partner. Ask how much notice you'd need to leave, and who decides where ads go. +Not for a new application. A former PubNation site should check which Mediavine program its account now sits in. Earlier acceptance doesn't prove you'd qualify for Mediavine today. -## What if you want public terms first? +## What kind of sites did PubNation take? -[Raptive](/ad-networks/raptive) and [Mediavine](/ad-networks/mediavine) publish their entry rules, share, and pay day. [Journey by Mediavine](/ad-networks/journey-by-mediavine) publishes a low traffic bar for growing sites. - -## How can you check if a site uses PubNation? - -Look for PubNation in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +Gaming, sports, tech, and entertainment sites, by its own description. One owner of a nearly nine-year-old gaming blog with 30,000 to 40,000 monthly sessions [said on Reddit in 2026](https://www.reddit.com/r/Blogging/comments/1s0ly5b/) they'd been accepted, earning about $621 the month before. That's history, not a guide to applying now. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/intro.mdx index c4bda632..4c85fcf3 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/intro.mdx @@ -1 +1 @@ -PubNation is a publisher monetization company. Its rules and terms aren't published on its website. +PubNation no longer takes publishers as a separate network. Mediavine's help center says PubNation sites have finished moving to Mediavine, so this page tracks sites that still list PubNation, mostly gaming, sports, tech, and entertainment. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/joining.mdx index 59697a1e..e6592874 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/joining.mdx @@ -1 +1 @@ -PubNation says it works with top-earning publishers, but it doesn't publish a traffic minimum, site rules, accepted regions, or how to apply. +There's no PubNation application any more. The old [PubNation homepage](https://www.pubnation.com/) is still online, but the [Mediavine help center](https://help.mediavine.com/) says the move is complete. To apply now, use Mediavine's current programs: [Mediavine](/ad-networks/mediavine) for sites with steady ad revenue, or [Journey](/ad-networks/journey-by-mediavine) for growing sites. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/pay.mdx index cc8523db..a928e7fe 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/pay.mdx @@ -1,3 +1,3 @@ ## How does PubNation pay? -Not public. The share, payment timing, minimum, methods, and currency aren't on its website. +Sites that moved over are paid under their Mediavine program. PubNation's old terms aren't current terms for anyone applying today. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/rules.mdx index b0506a5f..21949997 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/rules.mdx @@ -1,3 +1,3 @@ ## What rules does PubNation set? -Not public. Exclusivity, ad control, content rules, contract length, and notice aren't on its website. +None for new sites. Mediavine's program rules apply to accounts that moved. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/service.mdx index c33e8ef1..677c8028 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubnation/service.mdx @@ -1,3 +1,3 @@ ## What does PubNation do for you? -Not public. PubNation doesn't describe its reports, dashboard, support, or extra tools. +Nothing new, as a standalone network. Former PubNation sites now get Mediavine's service. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/article.mdx index 1ef2419e..2f818893 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/article.mdx @@ -1,19 +1,11 @@ ## Who is PubPower a fit for? -Publishers who want fast payment. Sites that earn more than $3,000 a month are paid on Net 0, in the payment window early the next month. PubPower looks for around 100,000 visitors a month, and its review usually takes a few days. +Small and mid-size sites, especially anime and entertainment, that want fast payment and a simple setup. Sites with their own bidder deals can use the Advanced package instead. -## Why do some PubPower sites get paid sooner? +## Can you run AdSense alongside PubPower? -PubPower pays sites above its monthly revenue line on Net 0, in its payment window from the 1st to the 20th of the next month. Other sites wait for the standard Net 30 term, which is still quicker than many managed networks. +Maybe. One owner of a seven-month-old anime site [wrote on Reddit in 2024](https://www.reddit.com/r/adops/comments/1dpv6e3/) that they ran both, and that PubPower's CPM came in below AdSense. Confirm it's allowed on your package. -## Which PubPower payment method should you pick? +## Which payment method should you pick? -Pick one with a minimum your earnings clear. Payoneer has the lowest minimum, and bank transfer the highest. A small site on bank transfer could wait months for a payment. - -## What should you ask before you sign? - -Your exact share, the payout currency, and whether PubPower must be your only ad partner. Ask how much notice you need to leave. None of these are public. - -## How can you check if a site uses PubPower? - -Look for PubPower in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +One with a minimum your earnings clear. A small site on bank transfer could wait months for a first payment. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/intro.mdx index 64c12a2a..e442c064 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/intro.mdx @@ -1 +1 @@ -PubPower is an ad management platform for publishers. Sites that earn more get paid faster. +PubPower runs ads for small and mid-size sites, including anime and gaming sites, and also offers tools for publishers who bring their own bidders. Bigger earners get paid faster, which makes it appealing for sites that need steady cash flow. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/joining.mdx index 135994e0..2d35f92d 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/joining.mdx @@ -1,5 +1,3 @@ -PubPower's traffic guideline is approximate, not a strict cutoff. It doesn't publish which regions it accepts. +Create an account on the [PubPower registration page](https://apps.pubpower.io/register), add your domain, and wait for review. You add PubPower's ads.txt lines and install its ad tag. -Your site must follow PubPower's content policy, which bars or restricts sexual, explicit, violent, illegal, gambling, and infringing content. Pop-ups and redirects aren't allowed. - -To start, you add PubPower's ads.txt lines and install its ad tag. Its quick-start guide and FAQ give different review times, and weekends can take longer. +The traffic figure comes from a [help page](https://help.pubpower.io/article/website-requirements) last updated around 2023, and it says "around", so treat it as old guidance, not a firm rule. The [content policy](https://help.pubpower.io/article/content-policies) bars or restricts sexual, violent, illegal, gambling, and infringing content, and pop-ups and redirects aren't allowed. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/pay.mdx index 871e3ef2..2e58d645 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/pay.mdx @@ -1,5 +1,5 @@ ## How does PubPower pay? -If you earn more than $3,000 in a month, PubPower pays on Net 0. Otherwise it pays on Net 30. +Sites earning above the monthly line get Net 0, and everyone else Net 30. Each method has its own minimum, from Payoneer at the low end to bank transfer at the high end. The payment page is about two years old, so confirm it. -The minimum depends on the method: $50 for Payoneer, $100 for PayPal, $100 to $1,000 for crypto, and $1,000 for a bank transfer. On the Essential package, your share is set for you and not published. On Advanced, bidders you bring yourself carry no revenue share. The payout currency is not public. +On the Essential package your share is set for you and not published. On Advanced, bidders you bring yourself carry no revenue share. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/rules.mdx index 62e915c2..fa4b8c81 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/rules.mdx @@ -1,5 +1,3 @@ ## What rules does PubPower set? -PubPower's content policy bars or restricts sexual, explicit, violent, illegal, gambling, and infringing content, and it doesn't allow pop-ups or redirects. Exclusivity, placement control, contract length, and notice are not public. - -A revenue share article on its help site is for ad networks using its white-label product, not for publishers. +The content policy and the ban on pop-ups and redirects are public. Contract terms aren't. Ask whether your package replaces your other ads or sits alongside them. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/service.mdx index 339cb1f8..2db1d832 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/pubpower/service.mdx @@ -1,3 +1,3 @@ ## What does PubPower do for you? -Not public. PubPower doesn't describe its publisher dashboard, support, or reports on the page we checked. +On Essential, PubPower runs your ad setup. On Advanced, you can plug in your own bidders and use its setup as the base. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/raptive/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/raptive/article.mdx index 196625a1..41868c0b 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/raptive/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/raptive/article.mdx @@ -1,23 +1,18 @@ ## Who is Raptive a fit for? -Sites with original, human-led content and a large share of readers in the US, Canada, UK, Australia, or New Zealand. Below 100,000 monthly pageviews, at least half your traffic must come from those countries. Above that, the bar is 40%. +Food, lifestyle, and editorial blogs, plus gaming sites, with original, human-led content and enough readers in the five countries. Thin, copied, or fully AI-written sites won't pass. -## What should you have ready before you apply? +## What should you check before you apply? -Google Analytics set up on your site, since Raptive asks for it. Check there that you're above the pageview bar and that enough visitors come from its five countries for your traffic tier. Your domain must also be at least six months old. Raptive doesn't publish how long review takes. +1. Monthly pageviews in Google Analytics. +2. The share of visitors from the five countries, against the rule for your size. +3. Your domain is at least six months old. +4. Long-form content on most pages, if you're under 100,000 pageviews. -## How does Raptive's pay compare with Mediavine? +## How does Raptive compare with Mediavine? -Raptive publishes a 75% share. [Mediavine](/ad-networks/mediavine)'s ranges from 75% to 90%, depending on its program tier. Raptive pays on Net 45, sooner than Mediavine's Net 65, and its minimum is $25 for most methods. Mediavine sets a yearly ad revenue bar instead of a pageview bar. - -## What should you ask before you sign? - -Whether Raptive must be your only ad partner, how long the contract runs, and how much notice you need to leave. Ask what placement controls you keep. None of these are public. +Both start new sites on the same share. [Mediavine](/ad-networks/mediavine) raises it in higher tiers and judges you on last year's ad revenue. Raptive judges pageviews and countries, and pays sooner. ## What if your site doesn't qualify yet? -[Journey by Mediavine](/ad-networks/journey-by-mediavine) starts at 1,000 premium sessions a month. [Monumetric](/ad-networks/monumetric)'s Propel program has a lower pageview bar, with a similar reader location rule. If too few readers are in Raptive's countries, [Clickio](/ad-networks/clickio) sets its bar by region, and [Google AdSense](/ad-networks/google-adsense) has no traffic minimum. - -## How can you check if a site uses Raptive? - -Look for Raptive in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +[Journey by Mediavine](/ad-networks/journey-by-mediavine) starts at 1,000 Tier 1 sessions in 30 days. [Monumetric](/ad-networks/monumetric)'s Propel program has a lower pageview bar with a similar country rule. If too few readers are in Raptive's countries, [Clickio](/ad-networks/clickio) sets its guide by region. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/raptive/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/raptive/intro.mdx index 5ad5635b..152db93b 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/raptive/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/raptive/intro.mdx @@ -1 +1 @@ -Raptive is a managed ad service for creators and independent publishers. It suits established sites with a large share of readers in the US, Canada, UK, Australia, or New Zealand. +Raptive, formerly AdThrive, runs ads for creators and independent sites, especially food, lifestyle, and other original editorial blogs. It publishes clear rules for traffic, reader countries, and domain age, so you can check before you apply. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/raptive/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/raptive/joining.mdx index 5b9ec112..1535e997 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/raptive/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/raptive/joining.mdx @@ -1,3 +1,3 @@ -A set share of your traffic must come from the US, Canada, UK, Australia, or New Zealand. That share drops once your site passes a higher traffic tier. You need original, human-led content, a domain that meets Raptive's minimum age, and Google Analytics access. +Raptive's [eligibility guide](https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive), updated in September 2026, counts five countries only: the US, UK, Canada, Australia, and New Zealand. Other high-income countries don't count toward the share. The share you need drops once you pass 100,000 monthly pageviews. -Apply through Raptive's creator application. +Below that size, most pages also need long-form content. You apply from the [Raptive dashboard](https://dashboard.raptive.com/) and [connect Google Analytics](https://help.raptive.com/hc/en-us/articles/6681661647515-Applying-to-Raptive-with-Google-Analytics) with read-only access. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/raptive/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/raptive/pay.mdx index 6bb39bba..659632c0 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/raptive/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/raptive/pay.mdx @@ -1,3 +1,3 @@ ## How does Raptive pay? -Raptive pays on the 15th of the month, on Net 45 terms. The minimum is higher if you choose a wire transfer. +On the 15th of the month, on Net 45. A wire transfer needs a higher balance than the other methods. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/raptive/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/raptive/rules.mdx index 65703cf1..84182f76 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/raptive/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/raptive/rules.mdx @@ -1,3 +1,3 @@ ## What rules does Raptive set? -Raptive sets up standard or custom ad layouts, depending on your size. Check placement controls in the agreement you sign. Exclusivity, contract length, and notice are not public. +Raptive runs your main display ads. Its help pages don't publish exclusivity, contract length, or notice, so check them in the agreement you sign. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/raptive/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/raptive/service.mdx index 4b9217ad..eeaeac13 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/raptive/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/raptive/service.mdx @@ -1,3 +1,3 @@ ## What does Raptive do for you? -You get a dashboard and support tickets. Depending on your tier, you also get a dedicated manager, and reporting and layout options differ by tier. +Raptive places and runs your ads as a managed service, with a dashboard to track earnings. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/article.mdx index 6b36d7cd..5281f76b 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/article.mdx @@ -1,19 +1,13 @@ -## Who is Refinery89 for? +## Who is Refinery89 a fit for? -Publishers who want one named contact for their ads. Each publisher works with a Publisher Success Manager. Refinery89 works with publishers worldwide but doesn't publish other entry rules, so contact its publisher team. +Websites and app publishers that want a managed setup with a named contact, including local news and lifestyle publishers and groups with several sites. -## When does Refinery89 pay? +## Is the payment minimum an entry rule? -It depends on your terms. Refinery89 doesn't publish a standard schedule, so ask your Publisher Success Manager which one is yours. The minimum is €250 or $250 a month, so a small site may carry a balance for a while. - -## What can you see in the Refinery89 dashboard? - -Daily revenue, CPM, RPM, pageviews, fill rate, and viewability, plus invoices and support tickets. You can export your data and manage ads.txt there too. +No. It's how much you need to earn before a payout. Refinery89 has no published traffic or revenue rule for joining. ## What should you ask before you sign? -Your share, your payment schedule, and whether Refinery89 must be your only ad partner. Ask how long the contract runs and how much notice you need to leave. - -## How can you check if a site uses Refinery89? - -Look for Refinery89 in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +1. What's your share, and when are you paid? +2. Does the setup replace your current ads or add formats? +3. How long does the contract run, and what notice ends it? diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/intro.mdx index 6f029520..74d3e8e0 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/intro.mdx @@ -1 +1 @@ -Refinery89 is an ad monetization service for publishers. Each publisher works with a Publisher Success Manager. +Refinery89 runs ads on websites and apps through a single tag or app SDK, with a named Publisher Success Manager for each publisher. It works worldwide and suits publishers, such as local news and lifestyle sites, who want one partner handling their ads. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/joining.mdx index 1b11480e..e2d33671 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/joining.mdx @@ -1 +1,3 @@ -Refinery89 doesn't publish a traffic minimum or site rules. Contact its publisher team to start. Once you're set up, you add its tag to your site or its SDK to your app. +Start on the [Refinery89 get started form](https://refinery89.com/get-started/), which takes a site or an app and asks for your pageview band and country. Those are intake questions, not cutoffs. The [eligibility FAQ](https://refinery89.com/docs/faqs/requirements/am-i-eligible/) publishes no traffic minimum and asks you to contact the team for a review. + +Websites add Refinery89's single tag, and apps add its SDK. Working worldwide means it's available in your country, not that every country gets the same demand or approval. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/pay.mdx index 27c0088a..d4165435 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/pay.mdx @@ -1,5 +1,3 @@ ## How does Refinery89 pay? -The payment minimum and currency depend on your region. There's no standard payment schedule, so ask your Publisher Success Manager for yours. - -The share is not public. +The minimum depends on your region. There's no standard pay date, so ask your Publisher Success Manager for your schedule and share. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/rules.mdx index 50925783..482ee531 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/rules.mdx @@ -1,3 +1,3 @@ ## What rules does Refinery89 set? -Not public. Exclusivity, placement control, content rules, contract length, and notice aren't on its publisher pages. +Contract terms aren't published. The web service may replace your current display setup, so ask what has to come off and what notice ends the deal. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/service.mdx index 6a6388e9..7d05fc56 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/refinery89/service.mdx @@ -1,5 +1,3 @@ ## What does Refinery89 do for you? -The dashboard shows daily revenue, CPM, RPM, pageviews, fill rate, and viewability. It also has invoice history, tickets, exports, and ads.txt management. - -You can reach your success manager through a Chrome plugin, the dashboard, WhatsApp, email, or phone. +Refinery89 runs your ad setup through one tag or SDK, and your Publisher Success Manager is your contact for setup, payments, and changes. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/article.mdx index 4af395bc..1fe79dcd 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/article.mdx @@ -1,23 +1,11 @@ ## Who is Revcontent a fit for? -Sites that want content recommendation widgets and native ads. Revcontent has no traffic minimum and no published region rule, but your site must follow its publisher terms and content policy. - -## How is your Revcontent share set? - -You negotiate it. Revcontent doesn't publish a standard rate, so compare its offer with what you earn now. - -## What's the payment minimum at Revcontent? - -It depends. The terms set one floor, and each payment method sets its own. Check your dashboard or order for the one that applies to you. +News and editorial sites that want to test native recommendations on top of their display ads. It's not a replacement for a display network. ## Which payment method should you pick? -In the US, ACH has the lowest minimum. Outside the US, PayPal's minimum is far lower than an international wire. +In the US, ACH. Outside the US, PayPal's minimum is far lower than a wire. ## How does Revcontent compare with Taboola and MGID? -[Taboola](/ad-networks/taboola) must be your only recommendation service while your deal runs. [MGID](/ad-networks/mgid) publishes a regional offer with a share and pay day. Revcontent negotiates each deal. - -## How can you check if a site uses Revcontent? - -Look for Revcontent in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +[Taboola](/ad-networks/taboola) must be your only recommendation service while your deal runs. [MGID](/ad-networks/mgid) publishes a traffic rule. Revcontent has none but reviews every domain. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/intro.mdx index fc370abf..25cce58a 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/intro.mdx @@ -1 +1 @@ -Revcontent is a content recommendation and native advertising platform for publishers. Its share is negotiated with each publisher. +Revcontent fills content recommendation widgets with sponsored links, usually below or beside articles on news and editorial sites. It adds income next to your display ads rather than replacing them. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/joining.mdx index 2d5de7aa..bdcb5fd0 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/joining.mdx @@ -1 +1 @@ -Revcontent has no traffic minimum and no published region rule. You apply for approval, and your site must follow its publisher terms and content rules. +Apply on the [Revcontent publisher application](https://www.revcontent.com/resources/revcontent-publisher-application). There's no traffic minimum, but a person reviews your account and every domain you add, so no minimum doesn't mean automatic approval. Once a domain is approved, Revcontent sends placement options and widget code. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/pay.mdx index 3e785b9c..55af9c7a 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/pay.mdx @@ -1,5 +1,3 @@ ## How does Revcontent pay? -Your share is negotiated. The terms work out your revenue after allowed fees and set a payment floor. - -Each method also has its own minimum: $100 for ACH in the US, $100 for PayPal outside the US, and $1,000 for international wire. These don't add up to one clear threshold, so check your dashboard or order. Payment is in US dollars. +The publisher terms set one payment floor, and each payment method has its own minimum: lowest for US ACH and international PayPal, highest for international wire. Your share is set in your account or order terms. Payment is in US dollars. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/rules.mdx index aca1dc46..5c8eb20c 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/rules.mdx @@ -1,3 +1,3 @@ ## What rules does Revcontent set? -The publisher terms set policy and placement rules. They don't state one exclusivity rule or contract term for everyone. Content rules are in the publisher policy. +The [publisher terms](https://help.revcontent.com/knowledge/publisher-terms) set content and placement rules. Illegal, infringing, pornographic, obscene, illicit-drug, and unlawful gambling content isn't allowed. Ask whether another recommendation widget can stay on the same pages. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/service.mdx index 9950a7f3..9947c96e 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/revcontent/service.mdx @@ -1,3 +1,3 @@ ## What does Revcontent do for you? -Not public. Revcontent's terms don't describe support, reporting, or dashboard service levels. +Revcontent supplies recommendation widgets filled with sponsored content, with placements chosen after your domain is approved. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/setupad/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/setupad/article.mdx index 32cc8945..2fb056c1 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/setupad/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/setupad/article.mdx @@ -1,27 +1,11 @@ -## Who is Setupad a fit for? +## Which Setupad product fits you? -Publishers who want a platform to run their display ads. Its 2025 publisher guide looks for about 100,000 monthly visitors, mostly from the US, UK, Canada, and Australia. Self-Serve, its newer product, has separate plans for sites with 10 million or more monthly visits. +Most independent sites should look at the managed service. Self-Serve only makes sense if you already have tens of millions of monthly visits, your own Ad Manager, and direct deals with ad exchanges. -## Why are Setupad's rules unclear? +## Why are Setupad's managed rules unclear? -Setupad's guidance doesn't fully agree with itself. The 2025 guide counts visitors in one place and sessions in another, and Self-Serve has its own plans. Ask its team for current eligibility before you count on them. +Its guidance uses visitors in one place and sessions in another, and the figure isn't on a current rules page. Ask Setupad for current managed eligibility before you count on it. -## What should you have ready before you apply? +## What do publishers report? -An ads.txt file you can update, and a site that meets Setupad's quality policy. Setupad doesn't accept low-quality sites. - -## How can Setupad pay you? - -By bank transfer, PayPal, Payoneer, Wise, Revolut, or Paysera, according to its guidance. - -## How much does Setupad take? - -It depends on where the money comes from. If you use Setupad's optional reseller demand, Setupad keeps 20%. On Self-Serve, demand partners you work with directly pay you under their own agreements, and Setupad charges a flat €0.05 per thousand impressions. - -## What should you ask before you sign? - -The currency you're paid in, and whether Setupad must be your only ad partner. Ask how long the contract runs and how much notice you need to leave. - -## How can you check if a site uses Setupad? - -Look for Setupad in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +One Japanese publisher with about 3 million monthly pageviews, mostly from Asia, [wrote in October 2024](https://medium.com/@vibrant_mango_impala_136/setupad-review-my-1-year-with-setupad-and-why-i-ultimately-switched-back-to-google-adsense-150fd77506d5) that they used Setupad for a year and went back to AdSense over setup and performance concerns. It's one account without revenue figures. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/setupad/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/setupad/intro.mdx index a7649b7f..f63caf17 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/setupad/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/setupad/intro.mdx @@ -1 +1 @@ -Setupad is a platform that runs display ads for publishers. Its published rules come from blog articles, so check current terms with its team. +Setupad runs header bidding for publishers in two very different ways: a managed service that runs it for you, and Self-Serve, a platform for very large sites with their own Google Ad Manager and ad exchange accounts. Check which one you mean before you compare terms. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/setupad/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/setupad/joining.mdx index a0269188..8ccee4ea 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/setupad/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/setupad/joining.mdx @@ -1,3 +1,3 @@ -Setupad's 2025 publisher guide gives a traffic guideline, but it counts visitors in one section and sessions in another. Most of your traffic should come from the US, UK, Canada, or Australia. Self-Serve, its newer product, has its own plans for much larger sites, so check which one you're applying for. +**Managed service.** Setupad's [publisher guide](https://setupad.com/blog/best-ad-networks-for-publishers/) says most traffic should come from the US, UK, Canada, or Australia, and that low-quality sites aren't accepted. Its older traffic figure counts visitors in one place and sessions in another, and isn't confirmed on a current rules page. You set up ads.txt and use Setupad's demand, including Google. Contact Setupad through [its site](https://setupad.com/) to ask. -Your site must meet Setupad's quality policy, and low-quality sites aren't accepted. You set up ads.txt and run Setupad's demand sources, including Google. Apply through Setupad's publisher contact page. +**Self-Serve.** The [plans](https://setupad.com/setupad-self-serve/) start at 10 million monthly visits and need your own Google Ad Manager, direct ad exchange accounts, a high-quality site, and Setupad's approval. The live [sign-up form](https://signup.setupad.com/?lang=en&type=7) is for Self-Serve only. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/setupad/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/setupad/pay.mdx index 23b83f64..fae7b83f 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/setupad/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/setupad/pay.mdx @@ -1,5 +1,3 @@ ## How does Setupad pay? -Setupad's published guidance sets the payment timing and minimum for its managed service and its optional reseller demand. On Self-Serve, demand partners you work with directly pay you under their own agreements. For that demand, Setupad charges a flat fee per thousand impressions instead of a share. - -The currency is not public, and neither is the minimum for reseller demand on Self-Serve. +On the managed service, Setupad pays on its published terms, and its optional reseller demand keeps 20%. On Self-Serve, ad exchanges you work with directly pay you under their own agreements. Setupad charges a fee per thousand ad requests instead, with a prepayment on Business and a monthly minimum on Enterprise. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/setupad/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/setupad/rules.mdx index bb1e5f69..79fcc174 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/setupad/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/setupad/rules.mdx @@ -1,3 +1,3 @@ ## What rules does Setupad set? -You need to follow ad policies and keep an ads.txt file. Exclusivity, ad placement control, contract length, and notice are not public. +Both products need an up-to-date ads.txt file and policy-compliant ads. Ask about exclusivity and notice for the managed service. Self-Serve sits on top of your own accounts. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/setupad/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/setupad/service.mdx index 0de1377d..dd61a152 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/setupad/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/setupad/service.mdx @@ -1,3 +1,3 @@ ## What does Setupad do for you? -Not public. Setupad's articles don't describe its dashboard, reports, or support levels. +The managed service runs a header bidding setup and its demand for you. Self-Serve gives your own team the auction controls on top of your Ad Manager and ad exchange accounts. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/she-media/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/she-media/article.mdx index 6ff86e1f..28f023a4 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/she-media/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/she-media/article.mdx @@ -1,19 +1,13 @@ -## How do you join SHE Media? +## Who is SHE Media a fit for? -Apply online and give SHE Media access to your Google Analytics. It typically looks for 50,000+ monthly pageviews and at least 30% US traffic, though it may consider smaller sites case by case. Expect a reply in three to four weeks. +US-focused blogs in lifestyle, food, parenting, DIY, and women's interest topics, with original, human-led content and a site at least 90 days old. Label any AI-generated images clearly. -## What does SHE Media look for? +## Can a smaller site get in? -Original, brand-safe, human-led content on a site that's at least 90 days old. You also need a good track record with Google's ad products. If you use AI-generated images, label them clearly. +Sometimes, by individual review. Old reports don't settle it. One lifestyle blogger [reported in 2020](https://imperfectidealist.com/she-media-review/) earning $124 in a month at about 25,500 sessions, but sessions aren't pageviews, and that isn't proof of an exception. -## Can publishers outside the US work with SHE Media? +## What should you check before you sign? -Yes, but check how you'll be paid. Its FAQ says international publishers must use PayPal, and it can't work with countries where PayPal isn't available. A 2025 support guide adds Wise, ACH, and wire, if approved. Payoneer isn't one of them, so ask which method you'll get before you join. - -## What should you ask before you sign? - -Whether the 75% share and $20 minimum in its 2023 Member Guide still apply to you, and when your 12-month contract renews, since you must give 60 days' notice to stop it. SHE Media must be your only banner ad partner, so check which other ads you can keep. - -## How can you check if a site uses SHE Media? - -Look for SHE Media in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +1. Whether the 2023 share and minimum still apply. +2. Your renewal date, since stopping it takes 60 days' notice. +3. Which other ads must come off, since banners are exclusive. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/she-media/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/she-media/intro.mdx index a3446220..deb6fe6c 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/she-media/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/she-media/intro.mdx @@ -1 +1 @@ -SHE Media runs a partner network for publishers with original, brand-safe content. It wants at least 30% of traffic from the US, and may consider smaller sites case by case. +SHE Media runs ads for bloggers and creator-led sites, especially lifestyle, food, parenting, and DIY, with a strong US audience. It takes over your banner ads under a 12-month contract, so it suits established US-focused blogs ready to commit. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/she-media/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/she-media/joining.mdx index d3425787..c0548c8a 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/she-media/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/she-media/joining.mdx @@ -1,5 +1,3 @@ -SHE Media usually wants a set monthly traffic level, but it may consider smaller sites case by case. It also wants a solid share of US readers, a site that's been live for a while, and a good track record with Google's ad products. +Apply on the [SHE Media application](https://apply.shemedia.com/), which asks for your Google Analytics pageviews, current ad networks, and publishing platform, and requests read-only Analytics access. Sites built on Wix aren't eligible. -Your content must be original, brand-safe, and human-led. If you use AI-generated images, add a clear disclaimer. - -Apply online and share your Google Analytics. Onboarding includes Google MCM and an ads.txt file. The team aims to reply within a few weeks, but a reply isn't a final decision. +The [partner FAQ](https://www.shemedia.com/partner-network/faqs) treats the pageview figure as the standard. Smaller sites can get an individual look, based on content, consistency, and growth, but no lower number is published. Onboarding includes Google MCM and ads.txt. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/she-media/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/she-media/pay.mdx index 2ad7a9d4..ebaa88ab 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/she-media/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/she-media/pay.mdx @@ -1,5 +1,5 @@ ## How does SHE Media pay? -SHE Media pays after each month closes. Its share and payment minimum come from its Member Guide, last updated in March 2023, so check both against your contract. +The share and minimum come from SHE Media's Member Guide, last updated in March 2023, so check both against your contract. -US publishers are paid by direct deposit, or by check if ACH isn't available. Outside the US, SHE Media's pages disagree. Its FAQ says you must use PayPal, and it can't work with countries where PayPal isn't available. An April 2025 support guide says PayPal if you earn under $1,000 a month, with wire preferred above that, and Wise or ACH if approved. Payoneer isn't accepted. Currency is not public. +Outside the US, its pages disagree. The FAQ says all international partners are paid by PayPal, and sites in countries that can't receive PayPal can't join. An [April 2025 support guide](https://support.shemedia.com/hc/en-us/articles/35987097977627-Payment-Options-for-Publishers-Outside-the-US) adds Wise, ACH, or wire if approved. Ask which applies before you join. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/she-media/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/she-media/rules.mdx index f6f622bd..90d6c7cf 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/she-media/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/she-media/rules.mdx @@ -1,5 +1,5 @@ ## What rules does SHE Media set? -SHE Media must be your only partner for mobile and desktop banner ads. Affiliate links and affiliate banners are allowed alongside it. Its support team works with you on an ad layout you're happy with. +SHE Media must be your only partner for banner ads on mobile and desktop. Affiliate links and affiliate banners are allowed alongside it. Its support team works with you on an ad layout. -Contracts run for 12 months and renew on their own. To stop the renewal, tell SHE Media at least 60 days before it. Leave the ad code in place until the end date SHE Media gives you. Its FAQ doesn't say how much notice SHE Media must give you. +Contracts run 12 months and renew on their own. To stop the renewal, give notice at least 60 days before it, and contact support before you remove the ad code. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/she-media/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/she-media/service.mdx index d93d8473..547f1e58 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/she-media/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/she-media/service.mdx @@ -1,3 +1,3 @@ ## What does SHE Media do for you? -The Publisher Portal shows reports, at least for referral payouts. General dashboard reports, support times, and tools are not public. +SHE Media runs display, video, and native ads, and offers sponsored programs to its creators. Contract documents are in your dashboard. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/article.mdx index b6b8dfe6..e969b915 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/article.mdx @@ -1,23 +1,11 @@ -## What should you have ready before you join Snack Media? +## Who is Snack Media a fit for? -Live traffic stats to share, and time to add its ad tags. The tags must be live within 14 days of signing. +Sports publishers, clubs, and fan communities, plus entertainment sites, that want direct sales or video. A general blog has little public evidence of fit. -## Can you leave Snack Media? +## Managed or bespoke? -Yes. Either side can end the contract with 30 days' notice, and after the first term it runs month to month. - -## Does Snack Media need to be your only ad partner? - -Only if your order says so. Check the cover sheet before you sign. - -## When does Snack Media pay? - -Within 30 days after the month it receives the advertiser's money. So your pay depends on when advertisers pay Snack Media, not only on when you earned it. +Pick managed if you want Snack Media to run everything. Pick bespoke if you have your own setup and just want more demand. The exclusivity scope differs, so read the cover sheet for yours. ## What should you check on the cover sheet? -Your share, the length of the first term, and any exclusivity. The standard terms leave all three to the cover sheet. - -## How can you check if a site uses Snack Media? - -Look for Snack Media in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +Your commission, the length of the first term, and exactly which ad sales are exclusive to Snack Media. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/intro.mdx index 16371e41..0665744b 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/intro.mdx @@ -1 +1 @@ -Snack Media is a publisher ad network and monetization service. After the first contract term, it runs month to month. +Snack Media grew out of sports publishing and sells ads, video, and direct deals for sports and entertainment sites and communities. It offers a fully managed service or its demand on top of your own setup, so it suits sports publishers looking for a specialist. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/joining.mdx index 228964ec..8ce7cb0a 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/joining.mdx @@ -1,3 +1,3 @@ -Snack Media's standard agreement sets no traffic minimum. Its referral program has its own traffic bar, asks you to follow Google's policies, and leaves out sensitive and gambling sites. +Start on the [Snack Media publishers page](https://www.snack-media.com/publishers/). The [2025 publisher agreement](https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf) sets no general traffic minimum. You share live traffic stats, and tags must be live within 14 days of signing. -Every site must avoid hateful, pornographic, illegal, or infringing content. Accepted regions aren't public. Contact Snack Media through its site. +The impressions figure comes from the [referral program](https://www.snack-media.com/referral/), which also asks for Google policy compliance and leaves out sensitive and gambling sites. Those rules decide referral rewards, not who can join. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/pay.mdx index 5d39abcc..3fc90ffd 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/pay.mdx @@ -1,5 +1,3 @@ ## How does Snack Media pay? -Snack Media pays within 30 days after the month it receives the advertiser's money. Your share is set on the cover sheet you sign. The standard terms don't give one rate, minimum, method, or currency. - -Older Snack Media terms list a different minimum and timing. We go by the 2025 agreement instead. +Within 30 days after the month Snack Media receives the advertiser's money, so your pay follows when advertisers pay. Your commission is set on the cover sheet you sign. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/rules.mdx index ca69d78a..ceae3ff9 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/rules.mdx @@ -1,5 +1,3 @@ ## What rules does Snack Media set? -Snack Media is exclusive only if your order says so. The cover sheet sets the first contract term, and its length is not public. After that, the contract renews month to month. - -Either side can end the contract with 30 days' notice. +The standard agreement gives Snack Media exclusive rights for the services and ad sales it covers. The cover sheet sets the exact scope, your commission, and the first term. After that, either side can end the deal with 30 days' notice. Hateful, pornographic, illegal, and infringing content isn't allowed. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/service.mdx index 3decafe8..b74674c3 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/snack-media/service.mdx @@ -1,3 +1,3 @@ ## What does Snack Media do for you? -Not public. The standard terms don't describe a dashboard, reports, support, or extra tools. +The fully managed service runs your ads, direct sales, and video. The bespoke option lets you keep your own header bidding setup and add Snack Media's demand. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/article.mdx index ee645088..99021327 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/article.mdx @@ -1,23 +1,11 @@ ## Is Sovrn a fit for a small site? -Not for the Ad Exchange. It asks for more than 100,000 visits a month. Once you're in, its $25 payment minimum is lower than [Google AdSense](/ad-networks/google-adsense)'s $100. +Not for the Ad Exchange, below its visit rule. Above it, Sovrn can add demand to your current setup rather than replace it. -## What should you have ready before you apply? +## What's the difference between the Ad Exchange and Sovrn Commerce? -A working domain, an ad system ID, and an ads.txt file you keep up to date. Sovrn's approval guide also checks that your content is current and brand safe. +The Ad Exchange sells ad space on your site. Sovrn Commerce is a separate affiliate product. A Commerce account doesn't mean Ad Exchange approval. -## What's the difference between Sovrn's Ad Exchange and Sovrn Commerce? +## What can delay approval? -The Ad Exchange sells ad space on your site. Sovrn Commerce is a separate affiliate product with its own payment terms. The details on this page are for the Ad Exchange. - -## How does Sovrn pay? - -On Net 45, in US dollars, with some options to get local currency. Pick a method other than wire if you want the lowest minimum. - -## What should you ask before you sign? - -Your share, and whether there's an exclusivity rule or contract length. Neither is on the approval or payment pages. - -## How can you check if a site uses Sovrn? - -Look for Sovrn in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +Outside checks and manual review. Sovrn gives no fixed time. Stale content, missing privacy pages, or ads.txt records that don't match your account can all hold it up. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/intro.mdx index 1ed1603f..51acc1c6 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/intro.mdx @@ -1 +1 @@ -Sovrn offers an ad exchange and other monetization tools for publishers. This page covers its Ad Exchange. +Sovrn runs an ad exchange that adds buyers to your existing setup, plus a separate affiliate product, Sovrn Commerce. This page covers the Ad Exchange, which suits independent sites with steady traffic and well-kept ads.txt records. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/joining.mdx index 2fabcc76..f8304ef8 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/joining.mdx @@ -1,3 +1,3 @@ -Sovrn checks that your content is current and brand safe, and that you own the site. You need a working business domain and an ad system ID, and you must keep your ads.txt file up to date. Resellers also need a sellers.json file. +Create an account on the [Sovrn platform](https://platform.sovrn.com/account/signup), then start Ad Exchange onboarding. The traffic rule counts visits and must be strictly above the figure shown. Visits aren't the same as sessions or pageviews, so check how your analytics counts them. -How long approval takes depends on outside checks and whether your site needs a manual review. +The [approval guide](https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property) asks for content published in the past four months, privacy and brand safety policies, and an audience that isn't children or only under-16s. You need an operational business domain and ads.txt ownership details, and resellers also need sellers.json. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/pay.mdx index ff6505d2..f7258960 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/pay.mdx @@ -1,5 +1,3 @@ ## How does Sovrn pay? -The Ad Exchange pays on Net 45, in US dollars, with some options to receive local currency. - -Sovrn Commerce, its separate affiliate product, has different payment terms. +Most direct Ad Exchange publishers are paid on Net 45, though individual terms can differ. A wire needs a higher balance than other methods. Sovrn Commerce has its own payment terms. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/rules.mdx index 7ee66912..46801dbd 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/rules.mdx @@ -1,3 +1,3 @@ ## What rules does Sovrn set? -The Ad Exchange approval and payment pages don't state exclusivity, placement control, contract length, or notice. Sovrn Commerce has its own terms. +The Ad Exchange works alongside your own ad setup. Keep your ads.txt current and your content fresh, since the approval checks look at both. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/service.mdx index de13a37f..1c85c872 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/sovrn/service.mdx @@ -1,3 +1,3 @@ ## What does Sovrn do for you? -Sovrn's knowledge base covers account upkeep and payments. Dashboard reports and support levels are not public. +The Ad Exchange brings more buyers to your ad space. File changes, such as ads.txt updates, often show within about two business days. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/article.mdx index d62a0978..7fc749e5 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/article.mdx @@ -1,19 +1,11 @@ -## What does Sparteo offer besides display ads? - -Video through Viously, consent management through FastCMP, and Actirise, plus analytics on revenue and page speed. - ## Who is Sparteo a fit for? -Publishers who want ads, video, and consent tools from one company, with reports that include Core Web Vitals. Sparteo doesn't publish who qualifies. - -## How do you work with Sparteo? - -Sparteo doesn't publish how to apply. Contact the company to ask. - -## What should you ask before you sign? +Content publishers with enough scale to need a managed setup, especially education and reference sites like W3Schools in Sparteo's [case study](https://corporate.sparteo.com/post/w3schools-rpm-uplift-unified-monetisation-stack). That case is Sparteo's own and gives no traffic figures. -Your share, when you're paid, the payment minimum, and how you're paid. Ask whether Sparteo must be your only ad partner and how much notice you need to leave. None of this is public. +A typical solo blog has little public evidence of fit. [Google AdSense](/ad-networks/google-adsense) is the simpler start. -## How can you check if a site uses Sparteo? +## What should you ask in the sales call? -Look for Sparteo in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +1. Do you run my whole ad setup or just some tools? +2. How do you work with my Google Ad Manager and current bidders? +3. What share do I keep, and when am I paid? diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/intro.mdx index de1aee28..ae5eec39 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/intro.mdx @@ -1 +1 @@ -Sparteo is an ad technology company with managed ad services for publishers. Its services include Actirise, Viously video, and FastCMP. +Sparteo sells managed ad monetization and publisher technology, covering yield, video, analytics, and consent tools. It works through sales conversations, so it suits larger content publishers with real ad operations needs, such as the education site W3Schools in its case study. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/joining.mdx index 4d896500..9677255a 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/joining.mdx @@ -1 +1 @@ -Sparteo doesn't publish a traffic minimum, site rules, regions, or how to apply. +Start with the [Sparteo contact form](https://corporate.sparteo.com/contact). There's no self-serve application, and Sparteo doesn't publish traffic, country, or site age rules, so fit is decided in the sales conversation. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/pay.mdx index 9d7d8d42..7a210409 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/pay.mdx @@ -1,3 +1,3 @@ ## How does Sparteo pay? -Not public. Sparteo says it earns money when its publishers do, but it doesn't publish a share, payment timing, minimum, methods, or currency. +Sparteo agrees pay terms with each publisher. Ask for your share, payment timing, and minimum in writing. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/rules.mdx index 0ce83338..0a866c7a 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/rules.mdx @@ -1,3 +1,3 @@ ## What rules does Sparteo set? -Not public. Exclusivity, placement control, content rules, contract length, and notice aren't on its public pages. +They're set per contract. Ask whether Sparteo replaces your current setup or adds selected tools, and what notice ends the deal. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/service.mdx index e83cdefa..a5969261 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/sparteo/service.mdx @@ -1,5 +1,3 @@ ## What does Sparteo do for you? -Sparteo covers display ads, analytics, Actirise, Viously video, and FastCMP, a consent management tool. Its reports show revenue, viewability, time, URL, and Core Web Vitals. - -Support terms are not public. +Sparteo can run your ad yield and add video, analytics, and consent management. You can take the full managed service or pick modules. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/taboola/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/taboola/article.mdx index 88f316b5..5edbb071 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/taboola/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/taboola/article.mdx @@ -1,23 +1,11 @@ ## Who is Taboola a fit for? -Sites that want recommended stories and ads under or beside their content. Taboola doesn't publish a traffic minimum, but your site must follow its Publisher Policy. +News and editorial sites with enough articles to fill recommendation widgets. It isn't a display network replacement. ## Can you run Taboola with another recommendation widget? -No. Taboola must be your only recommendation service during the agreement. The rule covers recommendation services, so check your order for anything else. +No. [Revcontent](/ad-networks/revcontent) and [MGID](/ad-networks/mgid) run similar widgets, so you'd pick one of them or Taboola. Your display ad network can stay. -## How does Taboola pay? +## What do Taboola's case studies show? -In US dollars, within 45 days after the month ends. Most publishers are paid through Payoneer, but the options depend on where you are, so check yours when you set up your account. - -## What should you check in your order? - -Your share, the contract length, and how to end it. Taboola's order sets all three, and they aren't public. - -## What else runs recommendation ads? - -[Revcontent](/ad-networks/revcontent) and [MGID](/ad-networks/mgid) both run native and recommendation ads. Because of Taboola's exclusivity rule, you'd pick Taboola or one of them, not both. - -## How can you check if a site uses Taboola? - -Look for Taboola in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +Large publishers. Its [case study on The Independent](https://www.taboola.com/resources/case-studies/the-independent-uk), with about 63 million global visitors, reports 14% more Taboola revenue after adding in-article recommendations. It's Taboola's own report about a huge site, not what a small site should expect. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/taboola/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/taboola/intro.mdx index 4643d699..8c129ea9 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/taboola/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/taboola/intro.mdx @@ -1 +1 @@ -Taboola is a content recommendation and advertising platform for publishers. It shows recommended stories and ads on your pages. +Taboola fills "recommended for you" widgets with your own stories and paid links, mostly on news and editorial sites. It adds income next to your display ads, but must be your only recommendation service. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/taboola/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/taboola/joining.mdx index f6524497..be2765fb 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/taboola/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/taboola/joining.mdx @@ -1,3 +1,3 @@ -Taboola doesn't publish a traffic minimum or region rule. You need to own or properly license your content, and your site must follow the Taboola Publisher Policy. +Follow Taboola's [new account guide](https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account). You must be at least 18, own or properly license your content, and follow the [Publisher Policy](https://pubhelp.taboola.com/hc/en-us/articles/360033751274-Taboola-Publisher-Policy). There's no traffic number, but a person still reviews your site. -Apply through Taboola's online form. Its team replies quickly, but a reply isn't final approval. Once you're in, you add Taboola's widget code to your pages. +The response time is when you hear back, not final approval. Once in, you add Taboola's widget code. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/taboola/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/taboola/pay.mdx index e5f94d24..82344015 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/taboola/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/taboola/pay.mdx @@ -1,3 +1,3 @@ ## How does Taboola pay? -Your share is set in your order. Taboola pays in US dollars within 45 days after the month ends. Most publishers are paid through Payoneer, and other options depend on where you are. A general payment minimum is not public. +Your share is set in your order. Most publishers are paid through Payoneer, with other options depending on where you are. There's no general payment minimum published. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/taboola/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/taboola/rules.mdx index 33f82f3d..d8aee9d2 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/taboola/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/taboola/rules.mdx @@ -1,5 +1,3 @@ ## What rules does Taboola set? -While your agreement runs, Taboola must be your only recommendation service. The policy bans fake news, porn, copyright violations, defamation, threats, and criminal content. - -Your order sets the contract length and how to end it. +While your agreement runs, Taboola must be your only third-party recommendation service. Ordinary display ads can stay. The policy bans fake news, porn, copyright violations, defamation, threats, and criminal content. Your order sets the contract length and how to end it. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/taboola/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/taboola/service.mdx index 45cdea36..1fa37220 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/taboola/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/taboola/service.mdx @@ -1,3 +1,3 @@ ## What does Taboola do for you? -Taboola offers publisher support resources and policy help. Dashboard reports and dedicated support levels are not public. +Taboola supplies recommendation widgets that mix your own stories with paid links, placed below or within articles. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/teads/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/teads/article.mdx index 445beec6..ee425dfb 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/teads/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/teads/article.mdx @@ -1,23 +1,11 @@ ## Who is Teads a fit for? -Publishers with web, connected TV, or app inventory who want premium ad placements. Teads also offers content extension. It doesn't publish entry rules. +Established news, education, and local publishers with room for in-article video or premium formats. Small sites wanting a self-serve display tag have little evidence of fit. ## Is Teads the same as Outbrain? -Teads now includes what used to be Outbrain's business. +Teads now includes what used to be Outbrain's business, so you may see either name in older material. -## How do you join Teads? +## Does Teads replace your current ads? -Teads doesn't publish an application process. Its media owner page is where to start a partnership conversation. - -## When does Teads pay? - -Your contract sets it. Teads doesn't publish a standard payment term for publishers, so get yours in writing. - -## What should you ask before you sign? - -Your share, the payment minimum, and whether Teads must be your only ad partner. Ask how long the contract runs and how much notice you need to leave. - -## How can you check if a site uses Teads? - -Look for Teads in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +Usually not. It tends to add video and premium demand next to your setup. Confirm the scope for each format in your contract. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/teads/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/teads/intro.mdx index 86e85736..a2c9d5db 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/teads/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/teads/intro.mdx @@ -1 +1 @@ -Teads is a publisher advertising platform for web, connected TV, and apps. It now includes the former Outbrain business. +Teads sells premium video and in-article ad formats for established publishers across web, apps, and connected TV, and now includes the former Outbrain business. It works through sales partnerships, so it suits editorial publishers adding premium demand to their current setup. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/teads/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/teads/joining.mdx index 09085523..eae3cd86 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/teads/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/teads/joining.mdx @@ -1 +1,3 @@ -Teads describes partnerships across web, CTV, and apps, but doesn't publish a traffic minimum, content rules, regions, or how to apply. +Start on the [Teads media owners page](https://www.teads.com/media-owners) or its [contact form](https://www.teads.com/teads-contact/). There's no public application or traffic rule. Fit depends on your formats and market. + +Approval and going live can be separate steps. One Italian education site [said on Reddit in March 2026](https://www.reddit.com/r/adops/comments/1rr1frr/) it had been approved and installed tags, but ads hadn't started serving yet. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/teads/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/teads/pay.mdx index 3fff299b..8b528066 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/teads/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/teads/pay.mdx @@ -1,5 +1,3 @@ ## How does Teads pay? -Your share is set in your contract, and the rate can change with your pageviews or total revenue. Payment timing is negotiated in the contract too, with no standard term. - -The payment minimum, methods, and currency are not public. +Your share is set in your contract and can change with your pageviews or total revenue, according to Teads' 2025 annual filing. Payment timing is negotiated too, with no standard term. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/teads/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/teads/rules.mdx index 4c1e146a..169c592a 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/teads/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/teads/rules.mdx @@ -1,3 +1,3 @@ ## What rules does Teads set? -Teads describes editorial controls and lets you control which ads are blocked. Exclusivity, content rules, contract length, and notice are not public, so confirm them in your contract. +They're set in your contract. Ask whether Teads tags sit alongside your current ads or are exclusive for a format, such as in-article video. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/teads/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/teads/service.mdx index 38576db6..8c08d460 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/teads/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/teads/service.mdx @@ -1,3 +1,3 @@ ## What does Teads do for you? -Teads offers premium ad placements across web, CTV, and apps, plus content extension. Its media owner page mentions partnership support, but not dashboard or reporting levels. +Teads brings premium video and in-article formats and cross-screen demand from web, apps, and connected TV. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/article.mdx index 5e5b96bb..5aa9b900 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/article.mdx @@ -1,19 +1,11 @@ ## Who is The Moneytizer a fit for? -Publishers who want a managed header bidding service with a low payment minimum of €50 or $50. That suits a small site that would wait months to reach a $100 minimum. +Sites on their own domain with strong organic traffic from the US, UK, and Canada, that want a managed service without exclusivity. Sites that mostly live on paid or social referral traffic may not count enough organic visitors. -## When does The Moneytizer pay you? +## Why does the visitor type matter? -About two months after your invoice. The Moneytizer creates the invoice once your earnings reach the minimum. The payment simulator on its site shows how the timing works. +The rule counts organic unique visitors only. A site with plenty of pageviews can still fall short if much of its traffic is paid, or comes from outside the three countries. -## How do you join The Moneytizer? +## Is the low threshold a reason to pick it? -Sign up on its site and share your traffic stats. The Moneytizer doesn't publish a traffic minimum. Its team reviews each site for advertiser fit and content. - -## What should you ask before you sign? - -How long The Moneytizer can take to end your account, since its terms give it no notice period. You don't have to make it your only ad partner, and you must give 30 days' notice to leave. - -## How can you check if a site uses The Moneytizer? - -Look for The Moneytizer in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +It helps cash flow, since a small balance still gets paid. It isn't a joining rule. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/intro.mdx index 3589454e..6d71b4f6 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/intro.mdx @@ -1 +1 @@ -The Moneytizer is a managed monetization and header bidding service for publishers. Its payment minimum is low. +The Moneytizer runs several ad formats on owned websites as a managed service, with a low payout threshold and no exclusivity. Its US site sets a clear entry rule based on organic visitors from the US, UK, and Canada, so it suits established sites with strong search or other organic traffic. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/joining.mdx index c6778a9d..abd1eada 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/joining.mdx @@ -1,3 +1,3 @@ -You sign up on The Moneytizer's site and share your traffic stats. It doesn't publish a traffic minimum. Its team reviews each site for advertiser fit, and it doesn't say how long that takes. +The [US validation criteria](https://us.themoneytizer.com/faq/validation-criteria) count unique visitors from organic traffic in the 30 days before you register, and only those from the US, UK, and Canada. That's not pageviews, sessions, or all visitors, so check your analytics by channel and country first. The page doesn't give an effective date, and other regional sites may differ. -Once you're in, you add its ads.txt lines and ad tags. Sites with EU visitors also need a consent banner. +You must own the domain and have server access. Subdomains, subpages, and sites on Wix or Jimdo aren't accepted, and neither are streaming, illegal downloads, sexual or violent content, dating, crypto, social, or gambling sites. Register on the [US site](https://us.themoneytizer.com/), add your website, and wait for the quality review. Then add ads.txt and the ad tags, plus a consent banner for EU visitors. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/pay.mdx index 46634fbc..701505ed 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/pay.mdx @@ -1,3 +1,3 @@ ## How does The Moneytizer pay? -The Moneytizer creates your invoice once your earnings reach the minimum, and pays it about two months later. It pays by bank transfer or PayPal. The terms set your share as a minimum, so you may get more. +An invoice is created once your balance reaches the threshold, and it's paid 60 days after its date, once the advertisers have paid. The terms set your share as a floor, so you may get more. Payment is by bank transfer or PayPal. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/rules.mdx index 35c552f6..e0bf623d 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/rules.mdx @@ -1,5 +1,5 @@ ## What rules does The Moneytizer set? -The Moneytizer doesn't need to be your only ad partner. Its terms bar content that is racist, xenophobic, pedophilic, against human dignity, or illegal. You can remove its tags at any time if they clash with your editorial policy, and you choose which ad formats appear. +The [terms](https://www.themoneytizer.com/cgu) are non-exclusive, so other ad partners can stay. You choose which formats appear, and you can remove its tags if they clash with your editorial policy, explaining why in writing. -The terms set no fixed contract length. If you joined after March 11, 2024, you must give 30 days' notice to leave, or your last period's earnings may not be paid as agreed. The Moneytizer can close your account at any time if it earns $5 a month or less, or remove it if you break the terms. Its terms give no notice period for either. +There's no fixed contract length. If you registered after March 11, 2024, give 30 days' notice to leave, or recent earnings may not be paid. The Moneytizer can close an account earning $5 a month or less at any time. Racist, sexual, xenophobic, or illegal content isn't allowed. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/service.mdx index 5f918eb0..2f985173 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/the-moneytizer/service.mdx @@ -1,3 +1,3 @@ ## What does The Moneytizer do for you? -Not public. Its site doesn't describe a dashboard, reports, support, or extra tools in enough detail to list here. +The Moneytizer runs multiple ad formats on your site and handles the advertiser side. The terms are issued by Azerion, the company behind it. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/venatus/article.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/venatus/article.mdx index 4db5f164..62446582 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/venatus/article.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/venatus/article.mdx @@ -1,15 +1,11 @@ -## Who is Venatus for? +## Who is Venatus a fit for? -Publishers in gaming, sports, and entertainment. If your site covers those topics, Venatus is built around that kind of audience. +Established gaming, game platform, sports, and entertainment publishers. There's too little public evidence to call it a beginner option. -## How do you apply to Venatus? +## What do publishers say? -Fill in the publisher interest form on its site. A person on its team audits your site against its content rules. Venatus doesn't publish a traffic or region bar, so its team decides the rest. +Very little, with no traffic figures. One gaming publisher [wrote on Trustpilot in May 2025](https://www.trustpilot.com/review/www.venatus.com) that after four months their RPM was about three times what AdSense paid. In a [2026 Reddit thread](https://www.reddit.com/r/adops/comments/1sza527/venatus_vs_publisher_collective/), a commenter said they moved from Publisher Collective to Venatus in January 2026, without sharing results. -## What should you ask before you sign? +## What should gaming sites compare? -Your share, when you're paid, and the payment minimum. Ask whether Venatus must be your only ad partner, who decides where ads go, and how much notice you need to leave. None of this is public. - -## How can you check if a site uses Venatus? - -Look for Venatus in the site's ads.txt file, or paste the domain into our [ad network checker](/ad-network-checker). +Video fill, server-side setup, and exclusivity, against [Playwire](/ad-networks/playwire), [Publisher Collective](/ad-networks/publisher-collective), and [NitroPay](/ad-networks/nitropay). diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/venatus/intro.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/venatus/intro.mdx index 996c4af3..b826d822 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/venatus/intro.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/venatus/intro.mdx @@ -1 +1 @@ -Venatus is an ad partner for gaming, sports, and entertainment sites. +Venatus sells ads and direct deals for gaming, sports, and entertainment publishers, including HTML5 game sites. It reviews every site by hand, so it suits established publishers in those niches who want specialist demand. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/venatus/joining.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/venatus/joining.mdx index 02fff0f6..e63a695b 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/venatus/joining.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/venatus/joining.mdx @@ -1,3 +1 @@ -Venatus works with gaming, sports, and entertainment sites. It doesn't publish a traffic minimum or region rule. You can send its publisher interest form. - -A person on its team audits your site, and you must follow its Publisher Terms. Hate speech, adult content, illegal sharing or hacking, and promotion of drugs, tobacco, or firearms aren't allowed. +Send the [publisher contact form](https://www.venatus.com/contact/for-publishers). There's no public traffic or country rule. A person audits your site against its [brand safety standards](https://www.venatus.com/brand-safety), which ban hate speech, adult content, illegal file sharing, downloads, streaming, or hacking, and promotion of drugs, tobacco, or firearms. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/venatus/pay.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/venatus/pay.mdx index 42ff6a9d..59b171ee 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/venatus/pay.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/venatus/pay.mdx @@ -1,3 +1,3 @@ ## How does Venatus pay? -Not public. Venatus doesn't publish its share, payment timing, minimum, methods, or currency. +Venatus agrees pay terms with each publisher. Ask for your share, payment timing, and minimum in writing. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/venatus/rules.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/venatus/rules.mdx index 9c473b0a..f07e0cd8 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/venatus/rules.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/venatus/rules.mdx @@ -1,3 +1,3 @@ ## What rules does Venatus set? -Venatus bans hate speech, adult content, illegal sharing or hacking, and promotion of drugs, tobacco, or firearms. Exclusivity, placement control, contract length, and notice are not public. +The brand safety standards apply to every site. Ask whether Venatus replaces your current partner or adds gaming and video demand, and what notice ends the deal. diff --git a/app/(site)/(directories)/ad-networks/[slug]/content/venatus/service.mdx b/app/(site)/(directories)/ad-networks/[slug]/content/venatus/service.mdx index 63fe1469..b36f5092 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/content/venatus/service.mdx +++ b/app/(site)/(directories)/ad-networks/[slug]/content/venatus/service.mdx @@ -1,3 +1,3 @@ ## What does Venatus do for you? -Venatus says expert publisher teams manage your ads and bring curated demand. Dashboard and reporting details are not public. +Venatus runs your ads with its own publisher team and brings demand from gaming, sports, and entertainment advertisers, including video. diff --git a/app/(site)/(directories)/ad-networks/[slug]/network-details.tsx b/app/(site)/(directories)/ad-networks/[slug]/network-details.tsx index 4788b2b6..ee832070 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/network-details.tsx +++ b/app/(site)/(directories)/ad-networks/[slug]/network-details.tsx @@ -1,10 +1,11 @@ +import Link from "next/link"; import type { MDXContent } from "mdx/types"; import type { ReactNode } from "react"; import { DetailsLayout, FactsList, KeyNumbers, NotPublic, SourcesLine, type Fact, type KeyNumber } from "@/app/ui/ad-networks/details"; import { formatDay } from "@/app/ui/ad-networks/site-format"; import { proseClassName, proseFlowClassName } from "@/app/ui/site/prose"; import { UiTabs, type UiTab } from "@/app/ui/tabs"; -import { NOT_PUBLIC, joinPhrase, joiningNumbers, networkFacts } from "../ad-networks-shared"; +import { NOT_PUBLIC, networkFacts } from "../ad-networks-shared"; import type { AdNetworkFacts } from "../network-facts"; import type { AdNetworkContent } from "./content"; import styles from "./network.module.css"; @@ -14,24 +15,10 @@ type KeyFact = AdNetworkFacts["keyNumbers"][number]; // The mockup's words for the labels research uses. const keyLabels: Record = { "your share": "revenue share" }; -/** - * One key number in the mockup's form: the value, then a short label. A joining rule reads as - * `sessions a month to join`; anything after the first `;` in its note stays as a caveat. - */ -function keyNumber(item: KeyFact, joining: boolean): KeyNumber { - const [first = "", ...rest] = (item.note ?? "").split(";"); - if (joining) { - const phrase = joinPhrase(item); - if (phrase.startsWith(item.value) && phrase.length > item.value.length) { - // joinPhrase keeps only the unit; whatever it drops ("or 2 million …", ", for new sites") stays as the caveat. - const alternative = first.match(/\s(or\s+[^,]*\d.*)$/i)?.[1]; - const clause = first.replace(/\s+or\s+(?=[^,]*\d).*$/i, "").split(",").slice(1).join(",").trim(); - const caveat = [alternative, clause, rest.join(";").trim()].filter(Boolean).join("; "); - return { value: item.value, label: `${phrase.slice(item.value.length).trim()} to join`, note: caveat || undefined }; - } - } +/** Keep the researched label and caveat intact, including product and regional limits. */ +function keyNumber(item: KeyFact): KeyNumber { const label = item.label.charAt(0).toLowerCase() + item.label.slice(1); - return { value: item.value, label: keyLabels[label] ?? label, note: [first, ...rest].join(";").trim() || undefined }; + return { value: item.value, label: keyLabels[label] ?? label, note: item.note }; } /** Tab files start at `##`. They sit under the h3 panel heading UiTabs adds, so they render one level down. */ @@ -73,8 +60,7 @@ export function NetworkDetails({ content, name, slug }: { content: AdNetworkCont const { Article, Joining, Pay, Rules, Service } = content; const shown = facts?.keyNumbers.slice(0, 3) ?? []; - const joining = facts ? joiningNumbers(facts) : []; - const keyNumbers = shown.map((item) => keyNumber(item, joining.includes(item))); + const keyNumbers = shown.map(keyNumber); // Researched joining rows in network-facts.ts, in the mockup's order. "Not public" is a finding, not missing data. const joiningRows = facts ? factRows(facts.joining.map((row) => ({ ...row, value: row.value === NOT_PUBLIC ? null : row.value }))) : []; @@ -94,7 +80,19 @@ export function NetworkDetails({ content, name, slug }: { content: AdNetworkCont { id: "service", title: "Service", rows: [] as Fact[], Words: Service }, ] .filter((tab) => tab.rows.length || tab.Words) - .map(({ id, rows, title, Words }) => ({ id, title, content: <>{rows.length ? : null} })); + .map(({ id, rows, title, Words }) => ({ + id, + title, + content: <> + {rows.length ? : null} + {id === "joining" ? ( +
+

Use the free ad network requirements checker to see which published rules your numbers meet.

+
+ ) : null} + + , + })); const checked = facts ? formatDay(facts.checkedAt, true) : null; diff --git a/app/(site)/(directories)/ad-networks/[slug]/page.tsx b/app/(site)/(directories)/ad-networks/[slug]/page.tsx index 1cdbac5a..fac35d81 100644 --- a/app/(site)/(directories)/ad-networks/[slug]/page.tsx +++ b/app/(site)/(directories)/ad-networks/[slug]/page.tsx @@ -40,6 +40,7 @@ export default async function AdNetworkPage({ params }: { params: Promise<{ slug const { network, sites, stats } = data; const { Intro } = content; const rule = joinRule(slug); + const legacy = slug === "pubnation" || slug === "pubgalaxy"; const officialHost = network.official_url ? new URL(network.official_url).hostname.replace(/^www\./, "") : null; return ( @@ -48,17 +49,19 @@ export default async function AdNetworkPage({ params }: { params: Promise<{ slug

- + {network.official_url && officialHost ? ( ) : null}

- {rule ? <> {joinSentence(rule)} : null} + {rule && !legacy ? <> {joinSentence(rule)} : null} {/* data-gate: the sync fills the listed and confirmed counts. */} {network.listed_count ? ( - network.listed_count === 1 + legacy + ? <> We track

{network.listed_count}
{network.listed_count === 1 ? "site" : "sites"} with legacy {network.name} identifiers. + : network.listed_count === 1 ? <> We list
{1}
site that uses {network.name}, and it {network.verified_count ? "is" : "isn't"} confirmed live from its own ads.txt file or ad code. : <> We list
{network.listed_count}
sites that use {network.name}, and
{network.verified_count}
{network.verified_count === 1 ? "is" : "are"} confirmed live from their own ads.txt files or ad code. ) : null} diff --git a/app/(site)/(directories)/ad-networks/content/article.mdx b/app/(site)/(directories)/ad-networks/content/article.mdx index cd308803..9136556a 100644 --- a/app/(site)/(directories)/ad-networks/content/article.mdx +++ b/app/(site)/(directories)/ad-networks/content/article.mdx @@ -3,7 +3,7 @@ Start with the networks you can join today, then look at what sites like yours run. Four steps cover most of it: 1. Sort the list by `Easiest to join` to see which networks take a site of your size. -2. Open a network's page and filter its sites by your niche. The traffic column shows whether sites your size run it. The [niches page](/ad-networks/niches) shows the same thing from the other side: the networks each niche uses most. +2. Open a network's page and filter its sites by your niche. The traffic column is a rough popularity group from Chrome data, not monthly pageviews, so use it to spot similar sites, not to check a rule. The [niches page](/ad-networks/niches) shows the same thing from the other side: the networks each niche uses most. 3. Compare the deal on each network's page: revenue share, when it pays, the minimum payout, and its rules, where the network publishes them. 4. Paste a site you'd like to grow into in the [ad network checker](/ad-network-checker) to see exactly who runs its ads. @@ -13,19 +13,24 @@ Many sites start with a self-serve network such as Google AdSense and move to a ## What do ad networks require to join? -Most ad networks set a minimum to join, shown on each card under "To join". Many count monthly traffic, and some, such as Mediavine, count the ad revenue your site already earns. Self-serve networks such as Google AdSense take sites of any size. Where a card says "Not public", the network doesn't publish a fixed rule. +Each card shows the joining rule under "To join" when the network publishes one. Some count traffic, some count the ad revenue your site already earns, and some, such as Google AdSense, publish no traffic number at all. No number doesn't mean automatic approval: almost every network still reviews your content, traffic quality, and visitor countries. Where a card says "Not public", the network doesn't publish a fixed rule. -Networks count traffic in different ways, so check which word the rule uses: +Networks count traffic in different ways, and the numbers aren't interchangeable. Check the exact word and period the rule uses: Every page loaded. One visit that reads three articles is three pageviews. -Visits. One session often includes several pageviews, so 50,000 sessions is harder to reach than 50,000 pageviews. -People. Someone who comes back five times in a month usually counts once. -What your ads already earn, usually over a year. Mediavine uses this instead of traffic. +One visit, which often includes several pageviews, so 50,000 sessions is harder to reach than 50,000 pageviews. Journey by Mediavine counts only Tier 1 sessions over 30 days. +Sovrn's word. It isn't defined the same way as Google Analytics sessions, so don't swap one for the other. +People. Someone who comes back five times in a month usually counts once. Ezoic counts monthly active users, MGID daily or monthly visitors, and The Moneytizer organic unique visitors from three countries. +What your ads already earn. Mediavine counts the previous calendar year, while Publift and PubGuru Premium look at a month. Traffic isn't the only rule. Many networks also check where your visitors come from, whether your content is original, and whether your site follows Google's ad policies. Each network's page lists its full rules. +## Why are some networks no longer taking sites? + +We track 44 networks, including two legacy names. PubNation's sites have moved to Mediavine, and PubGalaxy's publisher business now runs under Improve Digital. We keep both because sites still name them in their ads.txt files. The other pages cover current services, including some that only take publishers through a sales conversation or invitation. + ## How do you read a network card? The big number is how many sites we list for that network. Next to it, `confirmed` counts the sites where our last check found the network. The gap between the two is sites we haven't seen it on lately. diff --git a/app/(site)/(directories)/ad-networks/join-rules.ts b/app/(site)/(directories)/ad-networks/join-rules.ts index 37b48e2a..7dc65267 100644 --- a/app/(site)/(directories)/ad-networks/join-rules.ts +++ b/app/(site)/(directories)/ad-networks/join-rules.ts @@ -22,7 +22,7 @@ const payNumber = /pay|share|split|fee|payout|terms|threshold|notice|timing|sche const joinNumber = /join|traffic|users|visitors|pageviews|sessions|revenue benchmark/i; // Notes that say the number isn't a rule anyone has to meet, such as a benchmark or a referral bar. -const notARule = /not a general minimum|not the main rule/i; +const notARule = /not a general minimum|not the main rule|not a joining cutoff|not a confirmed joining cutoff|not a hard joining cutoff|case.study|unconfirmed|dated|unit unclear|not a cutoff|not a threshold|editorial estimate/i; /** Key numbers that say what it takes to join, such as revenue or traffic to apply. */ export function joiningNumbers(facts: AdNetworkFacts) { @@ -66,13 +66,10 @@ export function joinRule(slug: string): string | null { return first ? joinPhrase(first) : null; } -/** The header sentence for a join rule: `It takes sites with 50,000 sessions a month.` */ +/** A short entry summary that also supports program notes and sales-led applications. */ export function joinSentence(rule: string) { - if (rule === "No traffic minimum") return "It takes sites of any size."; - const typical = /^Typically\s+/i.test(rule); - const phrase = rule.replace(/^Typically\s+/i, ""); - const words = /^[A-Z][a-z]/.test(phrase) ? phrase.charAt(0).toLowerCase() + phrase.slice(1) : phrase; - return `It ${typical ? "typically " : ""}takes sites with ${words}.`; + if (rule === "No traffic minimum") return "It publishes no traffic minimum; each site is reviewed."; + return `Joining: ${rule.replace(/[.!?]+$/, "")}.`; } /** Monthly traffic needed, for ordering by how easy a network is to join. Unknown sorts last. */ diff --git a/app/(site)/(directories)/ad-networks/network-facts.ts b/app/(site)/(directories)/ad-networks/network-facts.ts index bcc067c6..e5deb7c6 100644 --- a/app/(site)/(directories)/ad-networks/network-facts.ts +++ b/app/(site)/(directories)/ad-networks/network-facts.ts @@ -16,7 +16,7 @@ export type AdNetworkFacts = { // Monthly, for sorting by how easy a network is to join. 0 only when the network says it has no // minimum; null when it publishes none. `label` keeps the network's own wording, such as // "More than 100,000 visits a month", wherever the rule is shown. - minTraffic: { amount: number; unit: "sessions" | "pageviews" | "visitors"; label?: string } | null; + minTraffic: { amount: number; unit: "sessions" | "pageviews" | "visitors" | "visits" | "monthly active users"; label?: string } | null; // The joining rule in one phrase, for a rule with alternative ways in that a single number would // drop, such as "$5,000 ad revenue or 2 million pageviews a month". Shown before any other rule. joinSummary?: string; @@ -29,48 +29,48 @@ export type AdNetworkFacts = { // Keyed by network slug. export const adNetworkFacts: Record = { - adapex: { checkedAt: "2026-10-21", keyNumbers: [{ label: "Pay day", value: "Net 60", sourceUrl: "https://adapex.io/faqs/" }], joining: [{ label: "Traffic", value: "Not public", sourceUrl: null }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "Not public", sourceUrl: null }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Google Ad Manager via MCM", note: "For the managed service", sourceUrl: "https://adapex.io/faqs/" }, { label: "Approval time", value: "Not public", sourceUrl: null }], minTraffic: null, revenueShare: null, paymentTerms: "Net 60", paymentThreshold: null, paymentMethods: [], sources: [{ label: "Publisher FAQ", url: "https://adapex.io/faqs/" }] }, - aditude: { checkedAt: "2026-10-21", keyNumbers: [], joining: [{ label: "Traffic", value: "Not public", sourceUrl: null }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "Not public", sourceUrl: null }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Not public", sourceUrl: null }, { label: "Approval time", value: "Not public", sourceUrl: null }], minTraffic: null, revenueShare: null, paymentTerms: null, paymentThreshold: null, paymentMethods: [], sources: [{ label: "Aditude publisher guidance", url: "https://www.aditude.com/blog/the-5-questions-every-publisher-should-ask-their-monetization-partner" }, { label: "Aditude homepage", url: "https://www.aditude.com/" }, { label: "Website terms", url: "https://www.aditude.com/policies/terms" }] }, - adnimation: { checkedAt: "2026-10-21", keyNumbers: [{ label: "Pay day", value: "Net 35", sourceUrl: "https://www.adnimation.com/faqs/" }], joining: [{ label: "Traffic", value: "Substantial traffic; no figure stated", note: "MAP is a separate program with no pageview minimum.", sourceUrl: "https://www.adnimation.com/faqs/" }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "No gambling, pornography, drugs, or similar content", sourceUrl: "https://www.adnimation.com/faqs/" }, { label: "Google standing", value: "Follow relevant Google policy guidelines", sourceUrl: "https://www.adnimation.com/faqs/" }, { label: "Must connect", value: "Share analytics access and connect Google Ad Manager, or have one created; install the ad code", sourceUrl: "https://www.adnimation.com/faqs/" }, { label: "Approval time", value: "Not public", sourceUrl: null }], minTraffic: null, revenueShare: "Revenue-share model; the standard-service percentage is not public", paymentTerms: "Net 35 after month end", paymentThreshold: null, paymentMethods: ["ACH (US bank)", "International bank wire", "PayPal by arrangement"], sources: [{ label: "Publisher FAQ", url: "https://www.adnimation.com/faqs/" }, { label: "Separate MAP program", url: "https://www.adnimation.com/map/" }, { label: "MAP terms", url: "https://www.adnimation.com/map-terms-conditions/" }] }, - adpushup: { checkedAt: "2026-10-21", keyNumbers: [{ label: "Revenue to join", value: "$3,000", note: "monthly ad revenue; no pageview minimum", sourceUrl: "https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/" }, { label: "Payment minimum", value: "$50", sourceUrl: "https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf" }, { label: "Pay day", value: "Net 45", sourceUrl: "https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf" }], joining: [{ label: "Traffic", value: "No traffic minimum", sourceUrl: "https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/" }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "No illegal, pornographic, hateful, fraudulent, or infringing content; no invalid activity", sourceUrl: "https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf" }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Install AdPushup code on approved sites", note: "AdPushup can approve or reject a site.", sourceUrl: "https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf" }, { label: "Approval time", value: "Not public", sourceUrl: null }, { label: "Ad revenue", value: "$3,000 a month", note: "The article states this minimum despite no pageview minimum.", sourceUrl: "https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/" }], minTraffic: null, revenueShare: "Rate is set in a separate Publisher Agreement; the public terms do not set a fixed percentage", paymentTerms: "Net 45 after the month ends under the public terms", paymentThreshold: "$50 USD or equivalent", paymentMethods: ["Direct deposit", "Wire transfer", "PayPal"], sources: [{ label: "Small publisher requirements and payment summary", url: "https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/" }, { label: "Publisher Terms of Service, last revised April 20, 2021", url: "https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf" }, { label: "Publisher onboarding", url: "https://www.adpushup.com/publisher/get-started/" }] }, - "amazon-publisher-services": { checkedAt: "2026-10-21", keyNumbers: [{ label: "UAM fee", value: "10%", note: "taken from SSP bid prices before the auction", sourceUrl: "https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf" }, { label: "Payment minimum", value: "$5", note: "UAM", sourceUrl: "https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf" }, { label: "Pay day", value: "Net 60", note: "UAM", sourceUrl: "https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf" }], joining: [{ label: "Traffic", value: "Not public", sourceUrl: null }, { label: "Visitor location", value: "Worldwide", note: "For Unified Ad Marketplace only", sourceUrl: "https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf" }, { label: "Content", value: "Not public", sourceUrl: null }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Google Ad Manager", note: "For Unified Ad Marketplace only", sourceUrl: "https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf" }, { label: "Approval time", value: "Not public", sourceUrl: null }], minTraffic: null, revenueShare: null, paymentTerms: "Net 60 for UAM", paymentThreshold: "$5 for UAM", paymentMethods: [], sources: [{ label: "UAM publisher update", url: "https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf" }] }, - "anymind-anymanager": { checkedAt: "2026-10-21", keyNumbers: [], joining: [{ label: "Traffic", value: "Not public", sourceUrl: null }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "Not public", sourceUrl: null }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "AnyManager tag for web or SDK for apps", sourceUrl: "https://anymindgroup.com/news/press-release/anymanagergames-launch/" }, { label: "Approval time", value: "Not public", sourceUrl: null }], minTraffic: null, revenueShare: "A fixed percentage is agreed in advance; the rate is not public", paymentTerms: null, paymentThreshold: null, paymentMethods: [], sources: [{ label: "AnyMind IR FAQ", url: "https://anymindgroup.com/ir/faq/" }, { label: "AnyManager overview", url: "https://anymindgroup.com/news/press-release/11388/" }, { label: "AnyManager Games launch and SDK", url: "https://anymindgroup.com/news/press-release/anymanagergames-launch/" }, { label: "AnyManager AI reporting and integration overview", url: "https://anymindgroup.com/news/press-release/anymanager-ai-reporting-agent" }] }, - "buysellads-carbon-ads": { checkedAt: "2026-10-21", keyNumbers: [{ label: "Base payout minimum", value: "$1", note: "some withdrawal methods have higher minimums", sourceUrl: "https://www.carbonads.net/faq" }, { label: "Typical CPM", value: "$1.20–$2.30", note: "a typical range, not guaranteed", sourceUrl: "https://www.carbonads.net/faq" }], joining: [{ label: "Traffic", value: "Average monthly pageviews are reviewed; no fixed minimum stated", sourceUrl: "https://www.carbonads.net/faq" }, { label: "Visitor location", value: "Strongest demand is for English-speaking developer and design audiences in the US, Canada, and Europe; other regions depend on demand", note: "This is a demand profile, not an exclusive country list.", sourceUrl: "https://www.carbonads.net/faq" }, { label: "Content", value: "Sites are reviewed for ad relevance and whether they are actively maintained", sourceUrl: "https://www.carbonads.net/faq" }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Use the Carbon Tag or API", sourceUrl: "https://www.buysellads.com/publishers" }, { label: "Approval time", value: "5–7 business days", note: "For application review.", sourceUrl: "https://www.carbonads.net/faq" }], minTraffic: null, revenueShare: null, paymentTerms: "Monthly earnings are added to the BuySellAds account within 30 days after month end and are available to withdraw within 60 days; Open Collective runs quarterly by request", paymentThreshold: "$1 before withdrawal-method minimums: $20 PayPal, $50 check, or $500 wire transfer", paymentMethods: ["PayPal", "Check", "Wire transfer", "Open Collective (quarterly, by request)"], sources: [{ label: "Publisher FAQ", url: "https://www.carbonads.net/faq" }, { label: "Publisher application", url: "https://www.carbonads.net/join" }, { label: "Placement policy", url: "https://www.carbonads.net/placement-policy" }, { label: "Carbon API guide", url: "https://www.carbonads.net/docs" }, { label: "BuySellAds publisher page", url: "https://www.buysellads.com/publishers" }] }, - clickio: { checkedAt: "2026-10-21", keyNumbers: [{ label: "Traffic to join", value: "100,000 to 1,000,000", note: "monthly pageviews; varies by region, and $500 monthly revenue can qualify a site below it", sourceUrl: "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards" }, { label: "Minimum earnings", value: "$500", note: "a month, after the first three months", sourceUrl: "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards" }, { label: "Pay day", value: "Net 60", note: "Net 30 can be chosen for some demand partners", sourceUrl: "https://legal.clickio.com/PublisherAgreement/" }], joining: [{ label: "Traffic", value: "100,000 to 1,000,000 pageviews by region", note: "Monthly thresholds are indicative; $500 monthly revenue for three months can qualify below them.", sourceUrl: "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards" }, { label: "Visitor location", value: "Sanctioned countries excluded", note: "Traffic thresholds vary by region.", sourceUrl: "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards" }, { label: "Content", value: "Follow AdSense policies and third-party rights rules", note: "Adult, shocking, or racially intolerant content cannot be monetized.", sourceUrl: "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards" }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Use ads.txt and an IAB-approved CMP; provide GA4 or a six-month report if needed", note: "Six months is a traffic report option when independent verification is unavailable, not a site-age rule.", sourceUrl: "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards" }, { label: "Approval time", value: "Not public", sourceUrl: null }, { label: "Site history", value: "Six months of traffic data if independent verification is unavailable", sourceUrl: "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards" }, { label: "Ad revenue", value: "$500 a month for three months", note: "Can qualify below the regional pageview requirement; also the ongoing account earnings minimum after three months.", sourceUrl: "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards" }], minTraffic: null, joinSummary: "100,000 to 1,000,000 pageviews a month by region, or $500 a month in ad revenue", revenueShare: "No fixed percentage; publisher commission depends on advertiser-selected tariffs and events", paymentTerms: "Current help page lists Net 60; the publisher agreement allows Net 30 for Net30 demand partners only, or Net 60 for all available demand partners", paymentThreshold: "Depends on payment method: $100 equivalent for ACH/eCheck/SEPA, check, or PayPal; $200 wire; $10 WebMoney; GBP 100 equivalent Payoneer", paymentMethods: ["ACH", "eCheck", "SEPA/local bank transfer", "Wire transfer", "Check", "PayPal", "WebMoney", "Payoneer"], sources: [{ label: "Entry standards", url: "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards" }, { label: "Payments and billing", url: "https://docs.clickio.com/books/get-started/page/payments-billing" }, { label: "Publisher agreement", url: "https://legal.clickio.com/PublisherAgreement/" }, { label: "How to join Clickio", url: "https://docs.clickio.com/books/get-started/chapter/how-to-join-clickio" }] }, - concert: { checkedAt: "2026-10-21", keyNumbers: [], joining: [{ label: "Traffic", value: "Not public", sourceUrl: null }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "Not public", sourceUrl: null }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Not public", sourceUrl: null }, { label: "Approval time", value: "Not public", sourceUrl: null }], minTraffic: null, revenueShare: null, paymentTerms: null, paymentThreshold: null, paymentMethods: [], sources: [{ label: "Concert SSP announcement", url: "https://www.voxmedia.com/2022/6/7/23157157/vox-media-concert-ssp-publisher-led-supply-side-platform-trade-desk-as-an-exclusive-launch-partner/" }, { label: "Concert advertiser terms", url: "https://admanager.concert.io/terms" }, { label: "Concert media kit", url: "https://cdn.vox-cdn.com/uploads/chorus_asset/file/22462899/Media_Kit_April_2021pdf.pdf" }] }, - ethicalads: { checkedAt: "2026-10-21", keyNumbers: [{ label: "Your share", value: "70%", sourceUrl: "https://www.ethicalads.io/publisher-policy/" }, { label: "Payment minimum", value: "$50", sourceUrl: "https://www.ethicalads.io/publisher-policy/" }, { label: "Pay day", value: "Monthly", note: "target by the 15th", sourceUrl: "https://www.ethicalads.io/publisher-policy/" }], joining: [{ label: "Traffic", value: "50,000 pageviews a month", note: "Exceptions may be considered for high-quality or growing sites", sourceUrl: "https://www.ethicalads.io/publishers/faq/" }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "Developer-focused sites that meet the publisher policy", note: "The policy sets ad placement and click-through requirements", sourceUrl: "https://www.ethicalads.io/publishers/faq/" }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Install the EthicalAds ad client after applying", sourceUrl: "https://www.ethicalads.io/publisher-guide/" }, { label: "Approval time", value: "Not public", sourceUrl: null }], minTraffic: { amount: 50000, unit: "pageviews" }, revenueShare: "70%", paymentTerms: "Monthly; target payment date is the 15th", paymentThreshold: "$50", paymentMethods: ["Stripe Connect / bank transfer", "PayPal", "OpenCollective", "GitHub Sponsors"], sources: [{ label: "Publisher FAQ", url: "https://www.ethicalads.io/publishers/faq/" }, { label: "Publisher policy", url: "https://www.ethicalads.io/publisher-policy/" }, { label: "Publisher guide", url: "https://www.ethicalads.io/publisher-guide/" }, { label: "Terms of service", url: "https://www.ethicalads.io/terms-of-service/" }] }, - ezoic: { checkedAt: "2026-10-21", keyNumbers: [{ label: "Users to join", value: "250,000", note: "monthly active users for new sites", sourceUrl: "https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES" }, { label: "Your share", value: "82%", note: "at least, of net display-ad revenue", sourceUrl: "https://www.ezoic.com/terms" }, { label: "Payment minimum", value: "$20", sourceUrl: "https://www.ezoic.com/terms" }], joining: [{ label: "Traffic", value: "250,000+ monthly active users for new sites", note: "Smaller sites may apply to the limited Incubator; sites monetizing before February 19, 2026 can be grandfathered if they keep using Ezoic.", sourceUrl: "https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES" }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "Original content in an AdSense-supported language; follow Google publisher policies", sourceUrl: "https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES" }, { label: "Google standing", value: "Comply with Google and AdSense policies; AdSense approval is not required for most sites", sourceUrl: "https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES" }, { label: "Must connect", value: "Connect Google Analytics for traffic verification and Google MCM; integrate JavaScript", sourceUrl: "https://support.ezoic.com/kb/article/ezoic-site-requirements-for-monetization" }, { label: "Approval time", value: "Ezoic review usually finishes within 10 days; Google MCM review can take up to 18 days", sourceUrl: "https://support.ezoic.com/kb/article/ezoic-site-requirements-for-monetization" }], minTraffic: { amount: 250000, unit: "visitors", label: "250,000 monthly active users" }, revenueShare: "At least 82% of net display-ad revenue under published Terms, unless another written agreement applies", paymentTerms: "About 35 days after Ezoic receives advertiser payment under the Terms; payment help describes Net 30 by default and optional Net 60/90 schedules", paymentThreshold: "$20", paymentMethods: ["Wise bank transfer", "PayPal", "Payoneer", "Check"], sources: [{ label: "Current eligibility requirements", url: "https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES" }, { label: "Site requirements and review timing", url: "https://support.ezoic.com/kb/article/ezoic-site-requirements-for-monetization" }, { label: "Terms", url: "https://www.ezoic.com/terms" }, { label: "Payment help", url: "https://support.ezoic.com/kb/article/ezoic-payments?lang=en-US" }, { label: "Incubator", url: "https://support.ezoic.com/kb/article/ezoic-incubator-program" }] }, - freestar: { checkedAt: "2026-10-21", keyNumbers: [{ label: "Typical traffic", value: "1,000,000", note: "monthly pageviews; Freestar takes all sizes but says it typically needs this", sourceUrl: "https://freestar.com/contact-us/" }, { label: "From top markets", value: "50%", note: "of traffic from the US, UK, Canada, New Zealand, or Australia", sourceUrl: "https://freestar.com/publisher-quality-requirements/" }], joining: [{ label: "Traffic", value: "Typically at least 1,000,000 pageviews", note: "Monthly; the contact page says Freestar accepts all sizes, so this is typical rather than an absolute cutoff.", sourceUrl: "https://freestar.com/contact-us/" }, { label: "Visitor location", value: "At least 50% from the US, UK, Canada, New Zealand, or Australia", sourceUrl: "https://freestar.com/publisher-quality-requirements/" }, { label: "Content", value: "Original, human-focused, mostly long-form, and brand-safe", sourceUrl: "https://freestar.com/publisher-quality-requirements/" }, { label: "Google standing", value: "Good standing with all major ad providers", sourceUrl: "https://freestar.com/publisher-quality-requirements/" }, { label: "Must connect", value: "Provide GA4 access, traffic and revenue history, and demand-partner status", sourceUrl: "https://freestar.com/publisher-quality-requirements/" }, { label: "Approval time", value: "About 3 to 6 weeks from kickoff to launch", note: "This is onboarding-to-launch timing, not review time alone.", sourceUrl: "https://freestar.com/contact-us/" }, { label: "Traffic source", value: "At least 50% from organic audiences", sourceUrl: "https://freestar.com/publisher-quality-requirements/" }], minTraffic: { amount: 1000000, unit: "pageviews", label: "Typically 1,000,000 pageviews a month" }, revenueShare: null, paymentTerms: null, paymentThreshold: null, paymentMethods: [], sources: [{ label: "Publisher quality requirements", url: "https://freestar.com/publisher-quality-requirements/" }, { label: "Publisher contact and onboarding", url: "https://freestar.com/contact-us/" }] }, - "geniee-ssp": { checkedAt: "2026-10-21", keyNumbers: [{ label: "Payment minimum", value: "$100", note: "$200 for wire transfer", sourceUrl: "https://s.geniee.jp/aladdin/resources/GenieeInternational/terms_geniee_en.pdf" }, { label: "Pay day", value: "End of month 2", note: "after earnings are calculated, once the advertiser pays", sourceUrl: "https://s.geniee.jp/aladdin/resources/GenieeInternational/terms_geniee_en.pdf" }], joining: [{ label: "Traffic", value: "Not public", sourceUrl: null }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "No false, obscene, infringing, or illegal content", sourceUrl: "https://s.geniee.jp/aladdin/resources/GenieeInternational/terms_geniee_en.pdf" }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Install Geniee's tags and keep them in place", sourceUrl: "https://s.geniee.jp/aladdin/resources/GenieeInternational/terms_geniee_en.pdf" }, { label: "Approval time", value: "Not public", sourceUrl: null }, { label: "Application", value: "Submit an application form", sourceUrl: "https://admin.genieessp.com/app/signup/en_US" }], minTraffic: null, revenueShare: null, paymentTerms: "Calculated the following month; transferred by the end of the second month after calculation if the advertiser pays", paymentThreshold: "$100 for PayPal or Payoneer; $200 for wire transfer", paymentMethods: ["PayPal", "Payoneer", "Wire transfer"], sources: [{ label: "Publisher terms of use", url: "https://s.geniee.jp/aladdin/resources/GenieeInternational/terms_geniee_en.pdf" }, { label: "Publisher signup form", url: "https://admin.genieessp.com/app/signup/en_US" }] }, - "google-adsense": { checkedAt: "2026-10-21", keyNumbers: [{ label: "Your share", value: "80%", note: "after the advertiser platform fee; about 68% with Google Ads demand", sourceUrl: "https://support.google.com/adsense/answer/180195?hl=en" }, { label: "Payment minimum", value: "$100", note: "in US dollars", sourceUrl: "https://support.google.com/adsense/answer/1709871?hl=en" }, { label: "Pay days", value: "21st to 26th", note: "of each month", sourceUrl: "https://support.google.com/adsense/answer/7164701?hl=en" }], joining: [{ label: "Traffic", value: "No minimum stated", sourceUrl: "https://support.google.com/adsense/answer/9724?hl=en" }, { label: "Visitor location", value: "Sign-up is available in listed countries", sourceUrl: "https://support.google.com/adsense/answer/13402307?hl=en" }, { label: "Content", value: "Original, high-quality, policy-compliant content", sourceUrl: "https://support.google.com/adsense/answer/9724?hl=en" }, { label: "Google standing", value: "No account termination for invalid traffic or policy violations", sourceUrl: "https://support.google.com/adsense/answer/81904?hl=en" }, { label: "Must connect", value: "Access to the site HTML", note: "Add the verification code or ad code and request a site review", sourceUrl: "https://support.google.com/adsense/answer/7584263?hl=en" }, { label: "Approval time", value: "Usually a few days; sometimes 2 to 4 weeks", sourceUrl: "https://support.google.com/adsense/answer/7402256?hl=en" }], minTraffic: { amount: 0, unit: "pageviews" }, revenueShare: "80% after the advertiser platform fee for AdSense for Content", paymentTerms: "Monthly; payments are issued between the 21st and 26th when the balance reaches threshold and there are no holds", paymentThreshold: "$100 USD, with equivalent thresholds by account currency", paymentMethods: ["Check", "EFT", "SEPA", "Wire transfer", "PayPal Hyperwallet where available"], sources: [{ label: "Revenue share", url: "https://support.google.com/adsense/answer/180195?hl=en" }, { label: "Payment threshold", url: "https://support.google.com/adsense/answer/1709871?hl=en" }, { label: "Payment schedule", url: "https://support.google.com/adsense/answer/7164701?hl=en" }, { label: "Eligibility", url: "https://support.google.com/adsense/answer/9724?hl=en" }, { label: "Sign-up countries", url: "https://support.google.com/adsense/answer/13402307?hl=en" }, { label: "Account restrictions after invalid traffic or policy termination", url: "https://support.google.com/adsense/answer/81904?hl=en" }, { label: "Site review timing", url: "https://support.google.com/adsense/answer/7402256?hl=en" }, { label: "Site verification and review steps", url: "https://support.google.com/adsense/answer/7584263?hl=en" }, { label: "Payment methods", url: "https://support.google.com/adsense/answer/1714397?hl=en-EN" }] }, - infolinks: { checkedAt: "2026-10-21", keyNumbers: [{ label: "Your share", value: "70%", note: "for In-Text ads under the published agreement", sourceUrl: "https://sites0001.infolinks.com/service-agreement" }, { label: "Pay day", value: "45 working days", note: "after month end, if the payment threshold is met", sourceUrl: "https://sites0001.infolinks.com/service-agreement" }, { label: "Payment minimum", value: "$50–$100", note: "depends on payment method", sourceUrl: "https://sites0001.infolinks.com/support/payments/what-is-the-infolinks-payment-threshold" }], joining: [{ label: "Traffic", value: "No minimum pageviews or visitors", sourceUrl: "https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks" }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "No adult, illegal, hateful, or infringing content", sourceUrl: "https://sites0001.infolinks.com/service-agreement" }, { label: "Google standing", value: "Publisher or related entities must not have been terminated by another monetization platform in the prior 24 months", note: "The agreement names Google AdSense as an example.", sourceUrl: "https://sites0001.infolinks.com/service-agreement" }, { label: "Must connect", value: "Install Infolinks JavaScript on approved sites", sourceUrl: "https://sites0001.infolinks.com/support/integration/how-do-i-integrate-infolinks-into-my-website" }, { label: "Approval time", value: "Within 48 hours", sourceUrl: "https://sites0001.infolinks.com/support/account/how-do-i-sign-up-as-an-infolinks-publisher" }], minTraffic: { amount: 0, unit: "pageviews" }, revenueShare: "70% for In-Text ads under the published agreement; rates for other formats vary", paymentTerms: "45 working days after month end when the selected payment threshold is met, under the published agreement", paymentThreshold: "$50 for PayPal, eCheck, ACH, or Payoneer; $100 for bank wire or Western Union", paymentMethods: ["PayPal", "Bank wire", "eCheck", "ACH", "Payoneer", "Western Union"], sources: [{ label: "Publisher eligibility", url: "https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks" }, { label: "Service agreement, last updated 2015", url: "https://sites0001.infolinks.com/service-agreement" }, { label: "Publisher sign-up and review", url: "https://sites0001.infolinks.com/support/account/how-do-i-sign-up-as-an-infolinks-publisher" }, { label: "Integration", url: "https://sites0001.infolinks.com/support/integration/how-do-i-integrate-infolinks-into-my-website" }, { label: "Payment options", url: "https://sites0001.infolinks.com/support/payments/what-are-my-payment-options" }, { label: "Payment thresholds", url: "https://sites0001.infolinks.com/support/payments/what-is-the-infolinks-payment-threshold" }] }, - "journey-by-mediavine": { checkedAt: "2026-10-21", keyNumbers: [{ label: "Traffic to join", value: "1,000", note: "premium sessions a month, per the founder's update", sourceUrl: "https://www.linkedin.com/posts/hochberger_two-years-ago-we-launched-journey-by-mediavine-activity-7491505513915027456-JBHZ" }, { label: "Your share", value: "70%", sourceUrl: "https://www.journeymv.com/getting-started-with-journey-by-mediavine/" }, { label: "Pay day", value: "Net 65", sourceUrl: "https://www.journeymv.com/getting-started-with-journey-by-mediavine/" }], joining: [{ label: "Traffic", value: "1,000 premium sessions a month", sourceUrl: "https://www.linkedin.com/posts/hochberger_two-years-ago-we-launched-journey-by-mediavine-activity-7491505513915027456-JBHZ" }, { label: "Visitor location", value: "Worldwide where Mediavine does business", sourceUrl: "https://get.journeymv.com/start-your-journey-1/" }, { label: "Content", value: "Original, engaging, human-written, brand-safe, regularly updated content", sourceUrl: "https://www.journeymv.com/affiliates-faq/" }, { label: "Google standing", value: "No active AdSense or Ad Exchange policy issues", sourceUrl: "https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine/" }, { label: "Must connect", value: "Install and run Grow for at least 30 days", note: "GA4 is optional.", sourceUrl: "https://www.journeymv.com/getting-started-with-journey-by-mediavine/" }, { label: "Approval time", value: "Not public", sourceUrl: null }, { label: "Site history", value: "About four months of domain history expected", note: "Journey says this is expected because of ad-partner requirements, not a confirmed Journey rule.", sourceUrl: "https://www.journeymv.com/getting-started-with-journey-by-mediavine/" }], minTraffic: { amount: 1000, unit: "sessions", label: "1,000 premium sessions a month" }, revenueShare: "70% revenue share for Journey", paymentTerms: "Net 65", paymentThreshold: null, paymentMethods: [], sources: [{ label: "Mediavine approval requirements, including Journey", url: "https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine/" }, { label: "Journey getting started: Grow, domain history, share and payment schedule", url: "https://www.journeymv.com/getting-started-with-journey-by-mediavine/" }, { label: "Journey publisher requirements", url: "https://www.journeymv.com/affiliates-faq/" }, { label: "Journey publisher page and supported regions", url: "https://get.journeymv.com/start-your-journey-1/" }, { label: "Mediavine founder update on the 1,000 premium-session bar", url: "https://www.linkedin.com/posts/hochberger_two-years-ago-we-launched-journey-by-mediavine-activity-7491505513915027456-JBHZ" }] }, - "media-net": { checkedAt: "2026-10-21", keyNumbers: [{ label: "Pay day", value: "Net 30", sourceUrl: "https://www.media.net/legal/" }], joining: [{ label: "Traffic", value: "Mostly organic traffic", sourceUrl: "https://www.media.net/legal/inventorypolicies/" }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "Original content; prohibited topics are excluded", sourceUrl: "https://www.media.net/legal/inventorypolicies/" }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Publish an authorized ads.txt or app-ads.txt file", sourceUrl: "https://www.media.net/legal/inventorypolicies/" }, { label: "Approval time", value: "Not public", sourceUrl: null }, { label: "Prior provider history", value: "No prior suspension or termination by another monetization provider", sourceUrl: "https://www.media.net/legal/", note: "The agreement also requires disclosure of specified prior traffic or policy suspensions" }], minTraffic: null, revenueShare: null, paymentTerms: "Net 30; monthly payments based on collected click-through revenue less commissions and costs", paymentThreshold: null, paymentMethods: [], sources: [{ label: "Publisher Agreement", url: "https://www.media.net/legal/" }, { label: "Inventory policies", url: "https://www.media.net/legal/inventorypolicies/" }] }, - mediavine: { checkedAt: "2026-10-21", keyNumbers: [{ label: "Revenue to join", value: "$5,000", note: "in annual ad revenue", sourceUrl: "https://www.mediavine.com/application-requirements/" }, { label: "Your share", value: "75% to 90%", note: "by 2026 program tier; older contracts may differ", sourceUrl: "https://help.mediavine.com/revenue-share" }, { label: "Pay day", value: "Net 65", sourceUrl: "https://help.mediavine.com/when-am-i-getting-paid-0" }], joining: [{ label: "Traffic", value: "Annual revenue, not a fixed traffic minimum", note: "Official starts at $5,000 yearly ad revenue; Journey is separate at 1,000 Tier 1 sessions in 30 days", sourceUrl: "https://www.mediavine.com/programs/" }, { label: "Visitor location", value: "No fixed mix; traffic origin is reviewed", note: "Mediavine evaluates traffic location, sources, and demographics", sourceUrl: "https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine" }, { label: "Content", value: "Original, audience-first content with clean, human, brand-safe traffic", sourceUrl: "https://www.mediavine.com/application-requirements/" }, { label: "Google standing", value: "Good standing with AdSense and Ad Exchange", note: "No active policy violations or account issues", sourceUrl: "https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine" }, { label: "Must connect", value: "Provide read-only Google Analytics access during review", sourceUrl: "https://prod.mediavine.com/blog/mediavine-application-process-faq/" }, { label: "Approval time", value: "Not public", sourceUrl: null }, { label: "Ad revenue", value: "$5,000 a year for Official", note: "The 2026 publisher path sets program tiers by company-wide revenue across sites", sourceUrl: "https://www.mediavine.com/programs/" }], minTraffic: null, revenueShare: "For new sites under the 2026 programs: 75% Official, 80% Select, 85% Signature, and 90% Premiere or Premiere Plus; legacy sites may have different rates", paymentTerms: "Net 65 from month end; processed on the first business day", paymentThreshold: "$100 for most methods; $200 for eCheck or local bank transfer", paymentMethods: ["PayPal", "Domestic ACH", "Wise", "US wire", "eCheck / local bank transfer", "International wire"], sources: [{ label: "Mediavine application requirements", url: "https://www.mediavine.com/application-requirements/" }, { label: "Approval criteria, including Journey", url: "https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine" }, { label: "2026 programs and revenue eligibility", url: "https://www.mediavine.com/programs/" }, { label: "Revenue share by program", url: "https://help.mediavine.com/revenue-share" }, { label: "Payment timing", url: "https://help.mediavine.com/when-am-i-getting-paid-0" }, { label: "Payment methods and minimums", url: "https://help.mediavine.com/mediavine-payment-methods" }, { label: "Application and Google Analytics access", url: "https://prod.mediavine.com/blog/mediavine-application-process-faq/" }, { label: "Google MCM onboarding", url: "https://help.mediavine.com/google-mcm-what-you-need-to-know" }] }, - mgid: { checkedAt: "2026-10-21", keyNumbers: [{ label: "Traffic to join", value: "3,000", note: "unique visitors a day, about 90,000 a month", sourceUrl: "https://help.mgid.com/publishers-general-information" }, { label: "Your share", value: "65%", note: "in a published Brazil offer; current order terms may differ", sourceUrl: "https://pr.mgid.com/monetize" }, { label: "Payment minimums", value: "$50 to $1,000", note: "depends on payment method", sourceUrl: "https://pr.mgid.com/monetize" }], joining: [{ label: "Traffic", value: "At least 3,000 unique visitors daily (90,000+ monthly)", sourceUrl: "https://help.mgid.com/publishers-general-information" }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "No adult, illegal, hateful, violent, or infringing content", sourceUrl: "https://www.mgid.com/services/publishers-tos" }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Install MGID ad-unit code using the Dashboard instructions", sourceUrl: "https://www.mgid.com/services/publishers-tos" }, { label: "Approval time", value: "Approval or rejection email within 24 hours; weekend reviews move to the next business day", sourceUrl: "https://help.mgid.com/publishers-general-information" }], minTraffic: { amount: 90000, unit: "visitors", label: "3,000 unique visitors a day" }, revenueShare: "65% in the published Brazil offer; the current Insertion Order controls the publisher's rate", paymentTerms: "Net 30 post-payment in the published Brazil offer; the current Insertion Order controls", paymentThreshold: "Method-specific in the published offer: $50 Paymaster24; $100 PayPal or Tipalti; $1,000 ACH or international bank transfer", paymentMethods: ["Paymaster24", "PayPal", "Tipalti bank transfer", "ACH bank transfer", "International bank transfer"], sources: [{ label: "Current publisher information", url: "https://help.mgid.com/publishers-general-information" }, { label: "Publisher terms, updated July 2026", url: "https://www.mgid.com/services/publishers-tos" }, { label: "Published Brazil publisher offer", url: "https://pr.mgid.com/monetize" }, { label: "Global publisher coverage", url: "https://www.mgid.com/publishers" }, { label: "Older publisher requirements, last updated 2020", url: "https://www.mgid.com/services/publisher-requirements" }] }, - "monetizemore-pubguru": { checkedAt: "2026-10-21", keyNumbers: [{ label: "To join PubGuru Premium", value: "$5,000", note: "monthly ad revenue or 2 million monthly pageviews", sourceUrl: "https://www.monetizemore.com/solutions/pubguru-premium/" }], joining: [{ label: "Traffic", value: "2,000,000 pageviews", note: "Monthly; alternative to the $5,000 revenue criterion.", sourceUrl: "https://www.monetizemore.com/solutions/pubguru-premium/" }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "Not public", sourceUrl: null }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Flexible setup through the publisher’s Google Ad Manager and demand partners", note: "Product setup detail, not a separate eligibility rule.", sourceUrl: "https://www.monetizemore.com/blog/header-bidding-platforms/" }, { label: "Approval time", value: "Not public", sourceUrl: null }, { label: "Ad revenue", value: "$5,000 a month", note: "Alternative to 2,000,000 monthly pageviews.", sourceUrl: "https://www.monetizemore.com/solutions/pubguru-premium/" }], minTraffic: null, joinSummary: "$5,000 ad revenue or 2 million pageviews a month", revenueShare: "Performance-based share customized per publisher; PubGuru Premium rate is not published", paymentTerms: null, paymentThreshold: null, paymentMethods: [], sources: [{ label: "PubGuru Premium requirements and features", url: "https://www.monetizemore.com/solutions/pubguru-premium/" }, { label: "PubGuru and header-bidding setup", url: "https://www.monetizemore.com/blog/header-bidding-platforms/" }, { label: "MonetizeMore revenue model", url: "https://www.monetizemore.com/blog/ezoic-vs-adsense-vs-monetizemore/" }, { label: "MonetizeMore FAQ", url: "https://www.monetizemore.com/frequently-asked-questions/" }] }, - monumetric: { checkedAt: "2026-10-21", keyNumbers: [{ label: "Traffic to join", value: "10,000", note: "monthly pageviews", sourceUrl: "https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/" }, { label: "Pay day", value: "Net 60", sourceUrl: "https://www.monumetric.com/payment-terms-and-how-you-are-paid/" }, { label: "Payment minimum", value: "$10", sourceUrl: "https://www.monumetric.com/payment-terms-and-how-you-are-paid/" }], joining: [{ label: "Traffic", value: "At least 10,000 pageviews", note: "Monthly", sourceUrl: "https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/" }, { label: "Visitor location", value: "At least 50% from the US, UK, Canada, or Australia", sourceUrl: "https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/" }, { label: "Content", value: "English; no pornography, drugs, hate speech, or copyrighted content", sourceUrl: "https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/" }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Google Ad Manager through MCM", sourceUrl: "https://www.monumetric.com/what-googles-switch-to-mcm-means-for-publishers/" }, { label: "Approval time", value: "Not public", sourceUrl: null }, { label: "Propel setup", value: "WordPress or Blogger, six ad slots, and a $99 implementation fee", note: "Propel only", sourceUrl: "https://www.monumetric.com/requirements-for-the-propel-program/" }], minTraffic: { amount: 10000, unit: "pageviews" }, revenueShare: null, paymentTerms: "Net 60; paid monthly within the first ten business days", paymentThreshold: "$10; balance rolls forward below this amount", paymentMethods: ["US direct deposit", "International PayPal"], sources: [{ label: "Eligibility requirements", url: "https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/" }, { label: "Propel program requirements", url: "https://www.monumetric.com/requirements-for-the-propel-program/" }, { label: "Google MCM setup", url: "https://www.monumetric.com/what-googles-switch-to-mcm-means-for-publishers/" }, { label: "Payment terms", url: "https://www.monumetric.com/payment-terms-and-how-you-are-paid/" }] }, - "newor-media": { checkedAt: "2026-10-21", keyNumbers: [{ label: "Traffic for Catapult", value: "60,000", note: "US pageviews a month; Catapult only, not a general minimum", sourceUrl: "https://newormedia.com/programs" }, { label: "Traffic for Premier", value: "420,000", note: "US pageviews a month; Premier only, not a general minimum", sourceUrl: "https://newormedia.com/programs" }, { label: "Payment terms", value: "Net 30 / Net 45", note: "FAQ says Net 30; platform agreement says Net 45", sourceUrl: "https://newormedia.com/faqs/what-are-your-payment-terms" }], joining: [{ label: "Traffic", value: "No minimum for Elevate", note: "Catapult: 60,000 US pageviews; Premier: 420,000 US pageviews monthly", sourceUrl: "https://newormedia.com/programs" }, { label: "Visitor location", value: "Traffic origin is reviewed; no fixed country share stated", sourceUrl: "https://newormedia.com/elevatefaqs" }, { label: "Content", value: "English site with navigation; follow Google ad policies", note: "Elevate also requires at least two ad units per page", sourceUrl: "https://newormedia.com/elevatefaqs" }, { label: "Google standing", value: "Follow Google ad policies", sourceUrl: "https://newormedia.com/elevatefaqs" }, { label: "Must connect", value: "Google Ad Manager account", sourceUrl: "https://newormedia.com/elevatefaqs" }, { label: "Approval time", value: "Usually responds within 24 to 48 hours", note: "This is the stated response window, not a guaranteed approval time", sourceUrl: "https://newormedia.com/elevatefaqs" }, { label: "Exclusivity", value: "Required", note: "Newor Media says all publishers must be exclusive", sourceUrl: "https://newormedia.com/elevatefaqs" }], minTraffic: { amount: 0, unit: "pageviews" }, revenueShare: null, paymentTerms: "Net 30 in the public FAQ; Net 45 in the platform agreement", paymentThreshold: null, paymentMethods: ["PayPal", "Payoneer", "Direct wire transfer"], sources: [{ label: "Programs", url: "https://newormedia.com/programs" }, { label: "Elevate FAQ", url: "https://newormedia.com/elevatefaqs" }, { label: "Platform agreement", url: "https://newormedia.com/node/296" }, { label: "Payment terms FAQ", url: "https://newormedia.com/faqs/what-are-your-payment-terms" }, { label: "Payment methods FAQ", url: "https://newormedia.com/faqs/how-do-you-make-payments" }] }, - nitropay: { checkedAt: "2026-10-21", keyNumbers: [{ label: "Pay day", value: "Net 7", sourceUrl: "https://nitropay.com/docs/" }, { label: "Payout minimum", value: "None", note: "above transaction fees", sourceUrl: "https://nitropay.com/docs/" }, { label: "Go-live time", value: "5–7 business days", note: "after your site is accepted", sourceUrl: "https://nitropay.com/docs/" }], joining: [{ label: "Traffic", value: "Traffic amount is reviewed; no numeric minimum is published", sourceUrl: "https://nitropay.com/docs/" }, { label: "Visitor location", value: "Traffic geography is reviewed; accepted regions are not listed", sourceUrl: "https://nitropay.com/docs/" }, { label: "Content", value: "Site content and niche are reviewed; guidelines bar adult, illegal, violent, or infringing content", sourceUrl: "https://blog.nitropay.com/guidelines/" }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Install Nitro ad tags and provide a Google Ad Manager network code for Google MCM; GA4 access can speed review", sourceUrl: "https://nitropay.com/docs/" }, { label: "Approval time", value: "Average 5–7 business days after quality acceptance, before enough SSP coverage to go live", sourceUrl: "https://nitropay.com/docs/" }], minTraffic: null, revenueShare: null, paymentTerms: "Net 7; paid seven days after the start of each month", paymentThreshold: "No fixed minimum; earnings must exceed the transaction fee", paymentMethods: ["ACH (US)", "EFT (Canada)", "FPS (UK)", "NPP (Australia)", "BECS (New Zealand)", "FPSHK (Hong Kong)", "SEPA (Europe)", "IACH", "SWIFT wire"], sources: [{ label: "Nitro Docs Archive: approval, onboarding, and payments", url: "https://nitropay.com/docs/" }, { label: "Publisher Guidelines", url: "https://blog.nitropay.com/guidelines/" }] }, - "opti-digital": { checkedAt: "2026-10-21", keyNumbers: [{ label: "Pay day, Managed Inventory", value: "Net 45", sourceUrl: "https://knowledge-base.optidigital.com/knowledge/understanding-your-payment-terms" }, { label: "Pay day, Managed Account", value: "Net 60", note: "for Opti demand; Google pays its own revenue on a 25-day cycle", sourceUrl: "https://knowledge-base.optidigital.com/knowledge/understanding-your-payment-terms" }], joining: [{ label: "Traffic", value: "Not public", sourceUrl: null }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "Not public", sourceUrl: null }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Demand Hub needs CMP, ads.txt, and bidder setup", note: "This is for the Demand Hub product; no general publisher sign-up requirement is stated.", sourceUrl: "https://knowledge-base.optidigital.com/knowledge/getting-started-with-demand-hub" }, { label: "Approval time", value: "Not public", sourceUrl: null }], minTraffic: null, revenueShare: "Share of gross programmatic revenue; percentage not public", paymentTerms: "Net 45 for Managed Inventory; Net 60 for Opti demand under Managed Account; Google pays direct on its 25-day cycle", paymentThreshold: null, paymentMethods: [], sources: [{ label: "Payment terms by setup", url: "https://knowledge-base.optidigital.com/knowledge/understanding-your-payment-terms" }, { label: "Revenue-share and invoice flow", url: "https://knowledge-base.optidigital.com/knowledge/how-is-the-invoicing-working-at-opti-digital-when-will-i-get-paid" }, { label: "Demand Hub publisher integration", url: "https://knowledge-base.optidigital.com/knowledge/getting-started-with-demand-hub" }, { label: "Opti Digital publisher referral page (referral terms only)", url: "https://optidigital.com/refer-a-publisher/" }] }, - playwire: { checkedAt: "2026-10-21", keyNumbers: [{ label: "Traffic to join", value: "500,000", note: "monthly website pageviews; apps need 1,000 daily active users", sourceUrl: "https://www.playwire.com/faq" }, { label: "Your share", value: "50% / 75%", note: "of net direct-sales / indirect-sales revenue", sourceUrl: "https://www.playwire.com/terms-of-service" }, { label: "Pay day", value: "Net 60", sourceUrl: "https://www.playwire.com/terms-of-service" }], joining: [{ label: "Traffic", value: "500,000 monthly pageviews or 1,000 daily active app users", note: "The separate qualification guide suggests applying at 100,000 pageviews or 10,000 app DAUs for full ROI", sourceUrl: "https://www.playwire.com/faq" }, { label: "Visitor location", value: "Good footprint in English-speaking countries", note: "At least 20% US traffic is associated with higher average revenue, not stated as an eligibility minimum", sourceUrl: "https://www.playwire.com/faq" }, { label: "Content", value: "Unique, original content; IVT rating no higher than 7%", sourceUrl: "https://www.playwire.com/faq" }, { label: "Google standing", value: "Not blacklisted by Google or other major ad providers", sourceUrl: "https://www.playwire.com/faq" }, { label: "Must connect", value: "Implement the Playwire SDK", note: "Required to access Playwire demand", sourceUrl: "https://www.playwire.com/faq" }, { label: "Approval time", value: "Not public", sourceUrl: null }], minTraffic: { amount: 500000, unit: "pageviews" }, revenueShare: "50% of net direct-sales revenue; 75% of net indirect-sales revenue", paymentTerms: "Net 60 after month-end; paid in US dollars", paymentThreshold: null, paymentMethods: [], sources: [{ label: "Publisher FAQ", url: "https://www.playwire.com/faq" }, { label: "Qualification criteria", url: "https://www.playwire.com/qualification-criteria" }, { label: "Publisher terms of service", url: "https://www.playwire.com/terms-of-service" }] }, - pubfuture: { checkedAt: "2026-10-21", keyNumbers: [{ label: "Traffic to join", value: "100,000", note: "monthly pageviews, from PubFuture's 2025 case study", sourceUrl: "https://blog.pubfuture.com/the-secret-to-400-more-revenue-for-h5-game-sites-pubfutures-winning-formula/1007/" }, { label: "Pay day", value: "Net 30", sourceUrl: "https://pubfuture.com/" }, { label: "Payment minimum", value: "$50", sourceUrl: "https://pubfuture.com/" }], joining: [{ label: "Traffic", value: "100,000 pageviews a month", note: "A 2025 PubFuture case study calls this its minimum threshold; no current criteria page was found", sourceUrl: "https://blog.pubfuture.com/the-secret-to-400-more-revenue-for-h5-game-sites-pubfutures-winning-formula/1007/" }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "Not public", sourceUrl: null }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Not public", sourceUrl: null }, { label: "Approval time", value: "Not public", sourceUrl: null }], minTraffic: { amount: 100000, unit: "pageviews" }, revenueShare: null, paymentTerms: "Net 30", paymentThreshold: "$50", paymentMethods: ["PayPal", "Payoneer", "Bank transfer", "Bitcoin"], sources: [{ label: "Publisher FAQ and payment terms", url: "https://pubfuture.com/" }, { label: "Publisher case study stating the minimum threshold", url: "https://blog.pubfuture.com/the-secret-to-400-more-revenue-for-h5-game-sites-pubfutures-winning-formula/1007/" }, { label: "Publisher contact form", url: "https://pubfuture.com/contact" }, { label: "Publisher onboarding and ads.txt article", url: "https://blog.pubfuture.com/ads-txt-and-ad-revenue-what-every-publisher-should-know/1236/" }] }, - pubgalaxy: { checkedAt: "2026-10-21", keyNumbers: [], joining: [{ label: "Traffic", value: "Not public", sourceUrl: null }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "Not public", sourceUrl: null }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Not public", sourceUrl: null }, { label: "Approval time", value: "Not public", sourceUrl: null }], minTraffic: null, revenueShare: null, paymentTerms: null, paymentThreshold: null, paymentMethods: [], sources: [{ label: "Azerion announcement unifying publisher supply under Improve Digital", url: "https://www.azerion.com/azerion-unifies-its-publisher-supply-business-under-improve-digital-launching-a-full-circle-solution-for-publishers/" }, { label: "Current Improve Digital publisher offering", url: "https://improvedigital.com/" }, { label: "PubGalaxy official LinkedIn transition update", url: "https://gl.linkedin.com/company/pubgalaxy" }] }, - publift: { checkedAt: "2026-10-21", keyNumbers: [{ label: "Revenue to join", value: "More than $2,000", note: "monthly ad revenue, in USD", sourceUrl: "https://www.publift.com/blog/publift-requirements" }, { label: "Revenue split", value: "80/20", note: "in Publift's 2026 comparison; confirm in your order", sourceUrl: "https://www.publift.com/blog/best-mediavine-alternatives" }, { label: "Payment minimum", value: "$200", sourceUrl: "https://www.publift.com/blog/the-best-cpm-ad-network-for-publishers" }], joining: [{ label: "Traffic", value: "500,000 pageviews is a secondary signal", note: "Monthly; revenue is the main qualifying metric.", sourceUrl: "https://www.publift.com/blog/publift-requirements" }, { label: "Visitor location", value: "Best fit: majority of traffic from the Americas, Europe, or Australia/New Zealand", note: "Publift says it works best with this mix; it does not state a strict geographic cutoff.", sourceUrl: "https://www.publift.com/how-it-works" }, { label: "Content", value: "Useful, original, appropriate, and brand-safe content", sourceUrl: "https://www.publift.com/blog/publift-requirements" }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Not public", sourceUrl: null }, { label: "Approval time", value: "Ad tags provided within five days", note: "The guide does not separate review time from the ad-tag delivery window.", sourceUrl: "https://www.publift.com/blog/the-best-cpm-ad-network-for-publishers" }, { label: "Ad revenue", value: "More than $2,000 a month", note: "Primary qualifying metric, in USD.", sourceUrl: "https://www.publift.com/blog/publift-requirements" }], minTraffic: null, revenueShare: "80/20 model according to Publift’s 2026 comparison; confirm in the order", paymentTerms: "Google revenue: Net 30; other ad-network revenue: Net 90", paymentThreshold: "$200 USD", paymentMethods: ["Direct bank transfer"], sources: [{ label: "Publift requirements", url: "https://www.publift.com/blog/publift-requirements" }, { label: "How it works and publisher fit", url: "https://www.publift.com/how-it-works" }, { label: "2026 Mediavine alternatives comparison and revenue split", url: "https://www.publift.com/blog/best-mediavine-alternatives" }, { label: "2026 CPM network payment and tag timing comparison", url: "https://www.publift.com/blog/the-best-cpm-ad-network-for-publishers" }, { label: "2026 payment comparison", url: "https://www.publift.com/blog/ezoic-vs-adsense-vs-publift" }] }, - publir: { checkedAt: "2026-10-21", keyNumbers: [{ label: "Programmatic share", value: "85%", note: "publisher share; Publir retains 15%, before applicable service costs", sourceUrl: "https://publir.com/service_agreement" }, { label: "Custom ad share", value: "50/50", note: "publisher and Publir; Net 60", sourceUrl: "https://publir.com/service_agreement" }, { label: "Pro fee", value: "15%", note: "separate from custom ad sales", sourceUrl: "https://publir.com/app/pricing" }], joining: [{ label: "Traffic", value: "No traffic limit", sourceUrl: "https://publir.com/app/pricing" }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "Not public", sourceUrl: null }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Install Publir's software and ad tags", sourceUrl: "https://publir.com/service_agreement" }, { label: "Approval time", value: "Not public", sourceUrl: null }, { label: "Exclusivity", value: "Non-exclusive service agreement", sourceUrl: "https://publir.com/service_agreement" }, { label: "Notice", value: "Either party may terminate with 30 days’ notice", sourceUrl: "https://publir.com/service_agreement" }], minTraffic: { amount: 0, unit: "pageviews" }, revenueShare: "Programmatic and subscriptions: 85% to publisher before service costs; custom ads: 50/50; crowdfunding: Publir retains 15%", paymentTerms: "Programmatic and custom ads: at least monthly on Net 60; subscriptions: paid at least monthly", paymentThreshold: null, paymentMethods: [], sources: [{ label: "Pricing", url: "https://publir.com/app/pricing" }, { label: "Service agreement", url: "https://publir.com/service_agreement" }] }, - "publisher-collective": { checkedAt: "2026-10-21", keyNumbers: [{ label: "Revenue benchmark", value: "About €300", note: "daily ad revenue; a guide, not the main rule", sourceUrl: "https://www.publisher-collective.com/faq" }, { label: "Payment minimum", value: "€500", sourceUrl: "https://www.publisher-collective.com/partners-terms-conditions" }], joining: [{ label: "Traffic", value: "About €300 daily revenue; 3 million monthly pageviews outside core genres", note: "The FAQ says lower-revenue publishers may still be assessed for significant growth or high quality; this is not a universal floor", sourceUrl: "https://www.publisher-collective.com/faq" }, { label: "Visitor location", value: "Works with publishers globally", sourceUrl: "https://www.publisher-collective.com/faq" }, { label: "Content", value: "Unique, high-quality content and reputable traffic", note: "No bots or fraudulent traffic; partner terms also prohibit specified content", sourceUrl: "https://www.publisher-collective.com/faq" }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Add Publisher Collective JavaScript tags to the site", sourceUrl: "https://www.publisher-collective.com/faq" }, { label: "Approval time", value: "Not public", note: "The FAQ gives 10 to 14 days for onboarding setup, not application approval", sourceUrl: "https://www.publisher-collective.com/faq" }], minTraffic: null, revenueShare: "Set individually in the Advertising Representation Agreement", paymentTerms: "Paid after the advertiser pays; the partner terms set no fixed interval", paymentThreshold: "€500", paymentMethods: ["Bank transfer; GBP, EUR, or USD"], sources: [{ label: "Publisher FAQ and current eligibility", url: "https://www.publisher-collective.com/faq" }, { label: "Partner terms", url: "https://www.publisher-collective.com/partners-terms-conditions" }] }, - pubnation: { checkedAt: "2026-10-21", keyNumbers: [], joining: [{ label: "Traffic", value: "Aimed at elite, top-earning publishers; no numeric threshold stated", sourceUrl: "https://www.pubnation.com/" }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "Mentions gaming, sports, tech, entertainment, and other genres", sourceUrl: "https://www.pubnation.com/" }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Not public", sourceUrl: null }, { label: "Approval time", value: "Not public", sourceUrl: null }], minTraffic: null, revenueShare: null, paymentTerms: null, paymentThreshold: null, paymentMethods: [], sources: [{ label: "Official publisher homepage", url: "https://www.pubnation.com/" }] }, - pubpower: { checkedAt: "2026-10-21", keyNumbers: [{ label: "Typical traffic", value: "100,000", note: "monthly visitors, as a rough guide", sourceUrl: "https://help.pubpower.io/article/website-requirements" }, { label: "Pay day", value: "Net 0 or Net 30", note: "Net 0 above $3,000 a month in revenue", sourceUrl: "https://help.pubpower.io/article/payment-methods-terms" }, { label: "Payoneer minimum", value: "$50", sourceUrl: "https://help.pubpower.io/article/payment-methods-terms" }], joining: [{ label: "Traffic", value: "Around 100,000 visitors a month", note: "The eligibility article describes this as approximate.", sourceUrl: "https://help.pubpower.io/article/website-requirements" }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "Follow PubPower’s content policy; no pop-ups or redirects", note: "Policy bars or restricts sexual, explicit, violent, illegal, gambling, and infringing content.", sourceUrl: "https://help.pubpower.io/article/website-requirements" }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Add PubPower ads.txt lines and install its ad tag", sourceUrl: "https://help.pubpower.io/article/quick-start-to-your-monetization" }, { label: "Approval time", value: "Usually 24–48 hours to 2–4 days", note: "Quick-start says 24–48 hours; FAQ says 2–4 days and warns weekends can take longer.", sourceUrl: "https://help.pubpower.io/article/quick-start-to-your-monetization" }], minTraffic: { amount: 100000, unit: "visitors", label: "Around 100,000 visitors a month" }, revenueShare: "Essential publisher revenue share is tailored; Advanced custom bidders have no revenue share", paymentTerms: "Net 0 above $3,000 monthly revenue; otherwise Net 30", paymentThreshold: "Bank: $1,000; PayPal: $100; Payoneer: $50; crypto: BCH $100, BTC $1,000, USDT-ERC20 $1,000", paymentMethods: ["Bank transfer", "PayPal", "Payoneer", "Cryptocurrency (BCH, BTC, USDT-ERC20)"], sources: [{ label: "PubPower publisher packages and revenue-sharing model", url: "https://pubpower.io/" }, { label: "Website requirements", url: "https://help.pubpower.io/article/website-requirements" }, { label: "Content policies", url: "https://help.pubpower.io/article/content-policies" }, { label: "Quick-start and domain review", url: "https://help.pubpower.io/article/quick-start-to-your-monetization" }, { label: "Publisher FAQ and review timing", url: "https://help.pubpower.io/article/getting-started-faqs" }, { label: "Payment methods and terms", url: "https://help.pubpower.io/article/payment-methods-terms" }] }, - raptive: { checkedAt: "2026-10-21", keyNumbers: [{ label: "Traffic to join", value: "25,000", note: "monthly pageviews", sourceUrl: "https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive" }, { label: "Your share", value: "75%", sourceUrl: "https://help.raptive.com/hc/en-us/articles/360035078152-Getting-Started-with-Raptive" }, { label: "Pay day", value: "Net 45", sourceUrl: "https://help.raptive.com/hc/en-us/articles/202052255-When-do-I-get-paid" }], joining: [{ label: "Traffic", value: "At least 25,000 pageviews", note: "Monthly", sourceUrl: "https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive" }, { label: "Visitor location", value: "50% from five countries at 25k–99,999 pageviews; 40% at 100k+", note: "US, UK, Canada, New Zealand, or Australia", sourceUrl: "https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive" }, { label: "Content", value: "High-quality, original, human-led content", note: "Long-form content on most pages at 25k–99,999 pageviews", sourceUrl: "https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive" }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Google Analytics access", note: "Read-only authorization", sourceUrl: "https://help.raptive.com/hc/en-us/articles/6681661647515-Applying-to-Raptive-with-Google-Analytics" }, { label: "Approval time", value: "Not public", sourceUrl: null }, { label: "Domain age", value: "At least six months", sourceUrl: "https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive" }], minTraffic: { amount: 25000, unit: "pageviews" }, revenueShare: "75%", paymentTerms: "Net 45; paid on the 15th", paymentThreshold: "$25 for most methods; $100 for wire transfer", paymentMethods: ["US direct deposit", "eCheck or local bank transfer", "PayPal", "Paper check", "Wire transfer"], sources: [{ label: "Creator eligibility", url: "https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive" }, { label: "Applying with Google Analytics", url: "https://help.raptive.com/hc/en-us/articles/6681661647515-Applying-to-Raptive-with-Google-Analytics" }, { label: "Getting started and share", url: "https://help.raptive.com/hc/en-us/articles/360035078152-Getting-Started-with-Raptive" }, { label: "Payment timing", url: "https://help.raptive.com/hc/en-us/articles/202052255-When-do-I-get-paid" }, { label: "Payment methods", url: "https://help.raptive.com/hc/en-us/articles/360013465192-Payment-Methods" }, { label: "Payment thresholds", url: "https://help.raptive.com/hc/en-us/articles/360025379831-Why-didn-t-I-get-my-Raptive-payment" }] }, - refinery89: { checkedAt: "2026-10-21", keyNumbers: [{ label: "Payment minimum", value: "€250 or $250", note: "a month, by region", sourceUrl: "https://refinery89.com/docs/faqs/finance/is-there-a-minimum-threshold-for-getting-paid/" }], joining: [{ label: "Traffic", value: "Not public", sourceUrl: null }, { label: "Visitor location", value: "Worldwide", sourceUrl: "https://refinery89.com/docs/faqs/about-refinery89/where-does-refinery89-operate-and-offer-its-services/" }, { label: "Content", value: "Not public", sourceUrl: null }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Single Tag for websites or SDK for apps", sourceUrl: "https://refinery89.com/docs/faqs/onboarding/how-can-i-start-working-with-refinery89/" }, { label: "Approval time", value: "Not public", sourceUrl: null }], minTraffic: null, revenueShare: null, paymentTerms: "Ask your Publisher Success Manager; no standard schedule is published", paymentThreshold: "€250 or $250, based on region", paymentMethods: ["Bank transfer", "eCheck", "Wire transfer", "PayPal"], sources: [{ label: "Eligibility", url: "https://refinery89.com/docs/faqs/requirements/am-i-eligible/" }, { label: "Publisher service locations", url: "https://refinery89.com/docs/faqs/about-refinery89/where-does-refinery89-operate-and-offer-its-services/" }, { label: "How to start and connect", url: "https://refinery89.com/docs/faqs/onboarding/how-can-i-start-working-with-refinery89/" }, { label: "Payment threshold", url: "https://refinery89.com/docs/faqs/finance/is-there-a-minimum-threshold-for-getting-paid/" }, { label: "Payment timing", url: "https://refinery89.com/docs/faqs/finance/when-do-publishers-get-paid/" }, { label: "Payment methods", url: "https://refinery89.com/docs/faqs/finance/what-are-the-payment-methods-available/" }] }, - revcontent: { checkedAt: "2026-10-21", keyNumbers: [{ label: "Agreement payment floor", value: "$250", note: "payment-method minimums may differ", sourceUrl: "https://help.revcontent.com/knowledge/publisher-terms" }], joining: [{ label: "Traffic", value: "No traffic minimum", sourceUrl: "https://help.revcontent.com/knowledge/creating-a-revcontent-publisher-account", note: "Applications are reviewed case by case" }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "No illegal, infringing, pornographic, obscene, illicit-drug, or unlawful-gambling content", sourceUrl: "https://help.revcontent.com/knowledge/publisher-terms" }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "After domain approval, Revcontent sends placement choices and widget code", sourceUrl: "https://help.revcontent.com/knowledge/creating-a-revcontent-publisher-account" }, { label: "Approval time", value: "Each application and domain is reviewed by a human team; no timing is stated", sourceUrl: "https://help.revcontent.com/knowledge/creating-a-revcontent-publisher-account" }], minTraffic: { amount: 0, unit: "pageviews" }, revenueShare: "Set in the applicable account or order terms; no standard public rate", paymentTerms: null, paymentThreshold: "$250 in the agreement; method minimums are $100 for US ACH, $100 for international PayPal, and $1,000 for international wire", paymentMethods: ["ACH (US)", "PayPal (international)", "Wire transfer (international)"], sources: [{ label: "Publisher account creation and approval", url: "https://help.revcontent.com/knowledge/creating-a-revcontent-publisher-account" }, { label: "Publisher terms", url: "https://help.revcontent.com/knowledge/publisher-terms" }, { label: "Publisher payment requirements and methods", url: "https://help.revcontent.com/knowledge/publisher-payment-requirements-methods" }] }, - setupad: { checkedAt: "2026-10-21", keyNumbers: [{ label: "Traffic to join", value: "About 100,000", note: "monthly visitors or sessions; its 2025 guide uses both", sourceUrl: "https://setupad.com/blog/best-ad-networks-for-publishers/" }, { label: "Payment minimum", value: "$100", note: "in published guidance", sourceUrl: "https://setupad.com/blog/best-ad-networks-for-publishers/" }, { label: "Self-serve fee", value: "€0.05", note: "per thousand impressions, for direct self-serve", sourceUrl: "https://setupad.com/setupad-self-serve/" }], joining: [{ label: "Traffic", value: "About 100,000 monthly visitors or sessions", note: "The 2025 guide says 100K+ visitors in its requirements section and 100,000 monthly sessions in its comparison. Current Self-Serve has separate 10M+ monthly-visit plans.", sourceUrl: "https://setupad.com/blog/best-ad-networks-for-publishers/" }, { label: "Visitor location", value: "Main traffic from the US, UK, Canada, or Australia", sourceUrl: "https://setupad.com/blog/best-ad-networks-for-publishers/" }, { label: "Content", value: "Follow Setupad’s quality policy; low-quality sites are not accepted", sourceUrl: "https://setupad.com/blog/best-ad-networks-for-publishers/" }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Add ads.txt and use Setupad demand sources, including Google", sourceUrl: "https://setupad.com/blog/best-ad-networks-for-publishers/" }, { label: "Approval time", value: "Not public", sourceUrl: null }], minTraffic: null, revenueShare: "Optional Setupad reseller demand takes 20%; Self-Serve direct demand uses a €0.05 CPM fee", paymentTerms: "Net 60 for published managed terms and optional reseller demand; direct SSP partners pay under their own agreements", paymentThreshold: "$100 in published managed guidance; reseller-demand threshold not stated", paymentMethods: ["Bank transfer", "PayPal", "Payoneer", "Wise", "Revolut", "Paysera"], sources: [{ label: "Setupad publisher requirements and payment guidance", url: "https://setupad.com/blog/best-ad-networks-for-publishers/" }, { label: "Setupad Self-Serve plans, requirements and billing", url: "https://setupad.com/setupad-self-serve/" }, { label: "Setupad current platform overview", url: "https://setupad.com/" }, { label: "Setupad SSP guide", url: "https://setupad.com/blog/top-ssps-for-publishers/" }] }, - "she-media": { checkedAt: "2026-10-21", keyNumbers: [{ label: "Traffic to join", value: "50,000+", note: "monthly pageviews; smaller sites may be considered case by case", sourceUrl: "https://www.shemedia.com/partner-network/faqs" }, { label: "Your share", value: "75%", note: "gross open-marketplace programmatic revenue; guide updated March 2023", sourceUrl: "https://www.shemedia.com/member-spotlight/member-guide-for-partners" }, { label: "Pay day", value: "Net 35", sourceUrl: "https://www.shemedia.com/partner-network/faqs" }], joining: [{ label: "Traffic", value: "Typically 50,000+ pageviews", note: "Monthly; smaller sites may be considered case by case", sourceUrl: "https://www.shemedia.com/partner-network/faqs" }, { label: "Visitor location", value: "At least 30% US traffic", sourceUrl: "https://www.shemedia.com/partner-network/faqs" }, { label: "Content", value: "Original, high-quality, brand-safe, human-led content", note: "AI-generated images need a clear disclaimer", sourceUrl: "https://www.shemedia.com/partner-network/faqs" }, { label: "Google standing", value: "Good track record with Google ad products and platforms", sourceUrl: "https://www.shemedia.com/partner-network/faqs" }, { label: "Must connect", value: "Google MCM and ads.txt", note: "MCM and ads.txt are part of the onboarding requirements", sourceUrl: "https://support.shemedia.com/hc/en-us/articles/19361668032027-Onboarding-Guide-for-Wordpress-Sites" }, { label: "Approval time", value: "3–4 weeks for a response", note: "Response timing, not a final decision guarantee", sourceUrl: "https://www.shemedia.com/partner-network/faqs" }, { label: "Analytics", value: "Google Analytics access", sourceUrl: "https://apply.shemedia.com/" }, { label: "Site age", value: "At least 90 days", sourceUrl: "https://www.shemedia.com/partner-network/faqs" }, { label: "Ad inventory", value: "Exclusive mobile and desktop banner ads", note: "Affiliate links and banners are exceptions", sourceUrl: "https://www.shemedia.com/partner-network/faqs" }], minTraffic: { amount: 50000, unit: "pageviews", label: "Typically 50,000+ pageviews a month" }, revenueShare: "75% of gross open-marketplace programmatic revenue; up to 75% of direct and private marketplace revenue (Member Guide updated 2023)", paymentTerms: "Net 35 after the month closes", paymentThreshold: "$20 (Member Guide updated 2023)", paymentMethods: ["US direct deposit/ACH", "US check if ACH is unavailable", "PayPal for international publishers", "Wise/ACH or wire for international publishers if approved"], sources: [{ label: "Partner FAQ", url: "https://www.shemedia.com/partner-network/faqs" }, { label: "Publisher application", url: "https://apply.shemedia.com/" }, { label: "WordPress onboarding guide", url: "https://support.shemedia.com/hc/en-us/articles/19361668032027-Onboarding-Guide-for-Wordpress-Sites" }, { label: "Blogger onboarding guide", url: "https://support.shemedia.com/hc/en-us/articles/30950543170971-Onboarding-Guide-for-Blogger-Sites" }, { label: "Member Guide, updated March 2023", url: "https://www.shemedia.com/member-spotlight/member-guide-for-partners" }, { label: "International payment options, updated April 2025", url: "https://support.shemedia.com/hc/en-us/articles/35987097977627-Payment-Options-for-Publishers-Outside-the-US" }] }, - "snack-media": { checkedAt: "2026-10-21", keyNumbers: [{ label: "Referral program traffic", value: "1 million", note: "impressions; not a general minimum, only for referral eligibility", sourceUrl: "https://www.snack-media.com/referral/" }, { label: "Notice to leave", value: "30 days", sourceUrl: "https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf" }], joining: [{ label: "Traffic", value: "Referral program lists 1 million impressions", note: "This is referral-program eligibility; the publisher agreement does not state a universal traffic floor", sourceUrl: "https://www.snack-media.com/referral/" }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "No hateful, pornographic, illegal, or infringing content", note: "The referral program also excludes sensitive and gambling sites", sourceUrl: "https://www.snack-media.com/brand-safety-policy/" }, { label: "Google standing", value: "Must comply with Google policies for the referral program", sourceUrl: "https://www.snack-media.com/referral/" }, { label: "Must connect", value: "Share live traffic stats and install network tags", note: "Tags must be live within 14 days of the agreement date", sourceUrl: "https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf" }, { label: "Approval time", value: "Not public", sourceUrl: null }], minTraffic: null, revenueShare: null, paymentTerms: "Within 30 days after the month when Snack Media receives the advertiser funds", paymentThreshold: null, paymentMethods: [], sources: [{ label: "Publisher referral eligibility", url: "https://www.snack-media.com/referral/" }, { label: "Brand safety policy", url: "https://www.snack-media.com/brand-safety-policy/" }, { label: "2025 publisher agreement terms", url: "https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf" }, { label: "Terms page", url: "https://www.snack-media.com/Ad_Network_Terms_and_Conditions_for_Publishers/" }] }, - sovrn: { checkedAt: "2026-10-21", keyNumbers: [{ label: "Traffic to join", value: "More than 100,000", note: "monthly visits", sourceUrl: "https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property" }, { label: "Pay day", value: "Net 45", note: "for most direct publishers; terms may vary", sourceUrl: "https://authcore.atlassian.net/wiki/spaces/KB/pages/2693627510846" }, { label: "Payment minimum", value: "$25", note: "$50 for wire", sourceUrl: "https://knowledge.sovrn.com/kb/what-is-the-minimum-payment-threshold-for-sovrn" }], joining: [{ label: "Traffic", value: "More than 100,000 visits a month", sourceUrl: "https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property" }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "Current, brand-safe content; no child-directed, unsafe, or copyrighted material", sourceUrl: "https://knowledge.sovrn.com/kb/what-is-sovrn-s-approval-process-for-the-ad-exchange" }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Provide an operational business domain and current ads.txt ownership details; intermediaries also need sellers.json", sourceUrl: "https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property" }, { label: "Approval time", value: "Depends on external checks and possible manual review; no fixed estimate. File updates often show within about two business days.", sourceUrl: "https://knowledge.sovrn.com/kb/what-is-sovrn-s-approval-process-for-the-ad-exchange" }], minTraffic: { amount: 100000, unit: "sessions", label: "More than 100,000 visits a month" }, revenueShare: null, paymentTerms: "Net 45 for most Ad Exchange publishers; individual publisher terms may vary", paymentThreshold: "$25 standard; $50 for wire transfer", paymentMethods: ["PayPal", "ACH (US)", "Wire transfer", "eCheck/local transfer", "Paper check (US)"], sources: [{ label: "Property approval requirements", url: "https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property" }, { label: "Approval process and timing", url: "https://knowledge.sovrn.com/kb/what-is-sovrn-s-approval-process-for-the-ad-exchange" }, { label: "Current payment methods", url: "https://knowledge.sovrn.com/kb/how-do-i-get-paid-for-the-ad-exchange" }, { label: "Payment thresholds", url: "https://knowledge.sovrn.com/kb/what-is-the-minimum-payment-threshold-for-sovrn" }, { label: "Payment timing guide", url: "https://authcore.atlassian.net/wiki/spaces/KB/pages/2693627510846" }] }, - sparteo: { checkedAt: "2026-10-21", keyNumbers: [], joining: [{ label: "Traffic", value: "Not public", sourceUrl: null }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "Not public", sourceUrl: null }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Not public", sourceUrl: null }, { label: "Approval time", value: "Not public", sourceUrl: null }], minTraffic: null, revenueShare: null, paymentTerms: null, paymentThreshold: null, paymentMethods: [], sources: [{ label: "Company and publisher services", url: "https://corporate.sparteo.com/" }, { label: "Publisher technology privacy notice", url: "https://corporate.sparteo.com/services-privacy-notice" }, { label: "Publisher platform case study", url: "https://corporate.sparteo.com/post/w3schools-rpm-uplift-unified-monetisation-stack" }, { label: "Company expansion update", url: "https://corporate.sparteo.com/post/sparteo-strengthens-supply-leadership-to-accelerate-global-expansion" }, { label: "Sparteo company LinkedIn", url: "https://www.linkedin.com/company/sparteo" }] }, - taboola: { checkedAt: "2026-10-21", keyNumbers: [{ label: "Pay day", value: "Within 45 days", note: "after the month ends", sourceUrl: "https://www.taboola.com/policies/publisher-revshare-terms-and-conditions-1-3-US" }], joining: [{ label: "Traffic", value: "No numeric minimum stated", sourceUrl: "https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account" }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "Own or properly license content and follow the Publisher Policy", sourceUrl: "https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account" }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Install Taboola widget code", sourceUrl: "https://developers.taboola.com/web-integrations/docs/welcome" }, { label: "Approval time", value: "Team responds within 48 hours", note: "This is response timing, not final approval", sourceUrl: "https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account" }, { label: "Applicant age", value: "At least 18 years old", sourceUrl: "https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account" }], minTraffic: null, revenueShare: "Set in the applicable publisher Order; no standard public percentage", paymentTerms: "Within 45 days after month-end; paid in US dollars", paymentThreshold: null, paymentMethods: ["Payoneer (most publishers); exceptions vary by location"], sources: [{ label: "New publisher account guide", url: "https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account" }, { label: "Publisher policy", url: "https://pubhelp.taboola.com/hc/en-us/articles/360033751274-Taboola-Publisher-Policy" }, { label: "Web integration guide", url: "https://developers.taboola.com/web-integrations/docs/welcome" }, { label: "Publisher revenue-share terms", url: "https://www.taboola.com/policies/publisher-revshare-terms-and-conditions-1-3-US" }, { label: "Account setup and payment methods", url: "https://pubhelp.taboola.com/hc/en-us/articles/360003157054-Account-Set-Up" }] }, - teads: { checkedAt: "2026-10-21", keyNumbers: [], joining: [{ label: "Traffic", value: "Not public", sourceUrl: null }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "Not public", sourceUrl: null }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Not public", sourceUrl: null }, { label: "Approval time", value: "Not public", sourceUrl: null }], minTraffic: null, revenueShare: "Terms vary by contract; revenue-share rates may vary with pageview volume or total revenue", paymentTerms: "Negotiated in the media-partner contract; no standard payment interval is published", paymentThreshold: null, paymentMethods: [], sources: [{ label: "Media owner partnership", url: "https://www.teads.com/media-owners" }, { label: "2025 annual filing describing publisher agreements and negotiated payment timing", url: "https://www.sec.gov/Archives/edgar/data/1454938/000145493826000015/tead-20251231.htm" }] }, - "the-moneytizer": { checkedAt: "2026-10-21", keyNumbers: [{ label: "Your share", value: "At least 70%", note: "of pre-tax advertiser billings, in its published terms", sourceUrl: "https://www.themoneytizer.com/cgu" }, { label: "Invoice minimum", value: "€50", sourceUrl: "https://www.themoneytizer.com/cgu" }, { label: "Pay day", value: "60 days", note: "after the invoice", sourceUrl: "https://us.themoneytizer.com/category/payments-invoices" }], joining: [{ label: "Traffic", value: "Site statistics are requested and each site is reviewed for advertiser fit; no numeric minimum stated", sourceUrl: "https://www.themoneytizer.com/cgu" }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "No racist, xenophobic, pedophilic, indecent, or illegal content", sourceUrl: "https://www.themoneytizer.com/cgu" }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Install ads.txt and ad tags; use a consent banner for EU traffic", sourceUrl: "https://us.themoneytizer.com/publisherguide" }, { label: "Approval time", value: "A quality review follows website registration; no timing stated", sourceUrl: "https://us.themoneytizer.com/publisherguide" }], minTraffic: null, revenueShare: "At least 70% of the pre-tax amount billed to advertisers under published Terms", paymentTerms: "An invoice is generated automatically at the threshold and is payable 60 days after its issue date", paymentThreshold: "€50 under the published Terms; $50 in the US publisher FAQ", paymentMethods: ["Bank transfer", "PayPal"], sources: [{ label: "Publisher terms and conditions", url: "https://www.themoneytizer.com/cgu" }, { label: "Publisher guide", url: "https://us.themoneytizer.com/publisherguide" }, { label: "US payments FAQ", url: "https://us.themoneytizer.com/category/payments-invoices" }] }, - venatus: { checkedAt: "2026-10-21", keyNumbers: [], joining: [{ label: "Traffic", value: "Not public", sourceUrl: null }, { label: "Visitor location", value: "Not public", sourceUrl: null }, { label: "Content", value: "Pass a human audit and follow Publisher Terms; no hate speech, adult content, illegal sharing or hacking, or promotion of drugs, tobacco, or firearms", sourceUrl: "https://www.venatus.com/brand-safety" }, { label: "Google standing", value: "Not public", sourceUrl: null }, { label: "Must connect", value: "Not public", sourceUrl: null }, { label: "Approval time", value: "Not public", sourceUrl: null }], minTraffic: null, revenueShare: null, paymentTerms: null, paymentThreshold: null, paymentMethods: [], sources: [{ label: "Publisher brand-safety standards", url: "https://www.venatus.com/brand-safety" }, { label: "Publisher contact page", url: "https://www.venatus.com/contact/for-publishers" }, { label: "Venatus company site", url: "https://www.venatus.com/" }, { label: "Venatus company LinkedIn", url: "https://www.linkedin.com/company/we-are-venatus" }] }, + "adapex": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Pay day","value":"Net 60","note":"Monthly net terms; no public threshold or share.","sourceUrl":"https://adapex.io/faqs/"}],"joining":[{"label":"Application inputs","value":"Publisher form asks monthly revenue, monthly pageviews, and USA traffic share","note":"These are intake fields, not a published cutoff.","sourceUrl":"https://adapex.io/get-in-touch/"},{"label":"Traffic","value":"No numeric minimum published; positioned for mid-sized publishers","sourceUrl":"https://adapex.io/faqs/"},{"label":"Must connect","value":"Google Ad Manager through MCM","note":"Adapex says it works with existing AdSense, AdX and Prebid.","sourceUrl":"https://adapex.io/faqs/"},{"label":"Contract","value":"No long-term contract required to start; longer terms can be offered","sourceUrl":"https://adapex.io/faqs/"}],"revenueShare":null,"paymentTerms":"Net 60; paid monthly through the publisher's established method","paymentThreshold":null,"paymentMethods":[],"sources":[{"label":"Publisher FAQ","url":"https://adapex.io/faqs/"},{"label":"Contact","url":"https://adapex.io/get-in-touch/"}],"minTraffic":null}, + "aditude": {"checkedAt":"2026-10-22","keyNumbers":[],"joining":[{"label":"Application","value":"Book a demo/contact sales; no self-serve gate found.","note":"Web/app platform with tailored service.","sourceUrl":"https://www.aditude.com/contact"},{"label":"Traffic","value":"No public numeric requirement found.","sourceUrl":"https://www.aditude.com/case-studies"},{"label":"Publisher types","value":"Case studies cover media, gaming, audio and apps.","sourceUrl":"https://www.aditude.com/case-studies"}],"revenueShare":null,"paymentTerms":null,"paymentThreshold":null,"paymentMethods":[],"sources":[{"label":"Aditude publisher guidance","url":"https://www.aditude.com/blog/the-5-questions-every-publisher-should-ask-their-monetization-partner"},{"label":"Publisher platform","url":"https://www.aditude.com/"},{"label":"Website terms","url":"https://www.aditude.com/policies/terms"},{"label":"Case studies","url":"https://www.aditude.com/case-studies"},{"label":"Dexerto case study","url":"https://www.aditude.com/case-studies/dexerto"},{"label":"Publisher contact","url":"https://www.aditude.com/contact"}],"minTraffic":null}, + "adnimation": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Pay day","value":"Net 35","note":"Standard managed service; MAP has separate terms.","sourceUrl":"https://www.adnimation.com/faqs/"}],"joining":[{"label":"Standard traffic","value":"Substantial; no official number.","note":"CEO described 1–20m monthly visitors as a historical sweet spot, not a cutoff.","sourceUrl":"https://www.adnimation.com/adnimation-co-founder-talks-plans-for-growth-with-mergermarket/"},{"label":"MAP traffic","value":"No PV minimum; all sites reviewed.","sourceUrl":"https://www.adnimation.com/map/"},{"label":"Content","value":"No gambling, pornography, drugs or similar content.","sourceUrl":"https://www.adnimation.com/faqs/"},{"label":"Payment methods","value":"US ACH; international wire; PayPal by arrangement.","sourceUrl":"https://www.adnimation.com/faqs/"},{"label":"Google standing","value":"Follow relevant Google policy guidelines","sourceUrl":"https://www.adnimation.com/faqs/"},{"label":"Must connect","value":"Share analytics access and connect Google Ad Manager, or have one created; install the ad code","sourceUrl":"https://www.adnimation.com/faqs/"}],"revenueShare":"Revenue-share model; percentage not public","paymentTerms":"Net 35 after month end","paymentThreshold":null,"paymentMethods":["ACH (US)","International wire","PayPal by arrangement"],"sources":[{"label":"Publisher FAQ","url":"https://www.adnimation.com/faqs/"},{"label":"MAP program","url":"https://www.adnimation.com/map/"},{"label":"MAP terms","url":"https://www.adnimation.com/map-terms-conditions/"},{"label":"Co-founder interview","url":"https://www.adnimation.com/adnimation-co-founder-talks-plans-for-growth-with-mergermarket/"},{"label":"Case study","url":"https://www.adnimation.com/case-study/"}],"minTraffic":null}, + "adpushup": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Vendor-published revenue signal","value":"$3,000/month","note":"Soft signal in vendor small-publisher article; current onboarding does not confirm it as a hard gate.","sourceUrl":"https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/"},{"label":"Payment minimum","value":"$50","note":"Publisher terms last revised April 20, 2021; verify current offer.","sourceUrl":"https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf"},{"label":"Pay day","value":"Net 45","note":"2021-revised terms; verify current offer.","sourceUrl":"https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf"}],"joining":[{"label":"Traffic","value":"No confirmed current minimum.","note":"Vendor article says no PV minimum; onboarding page is silent.","sourceUrl":"https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/"},{"label":"Revenue","value":"About $3k/month is cited in vendor eligibility article.","note":"Not confirmed by current application route.","sourceUrl":"https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/"},{"label":"Application","value":"Submit site for review and install approved code.","sourceUrl":"https://www.adpushup.com/publisher/get-started/"},{"label":"Content","value":"No illegal, pornographic, hateful, fraudulent, or infringing content; no invalid activity","sourceUrl":"https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf"},{"label":"Must connect","value":"Install AdPushup code on approved sites","note":"AdPushup can approve or reject a site.","sourceUrl":"https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf"},{"label":"Ad revenue","value":"$3,000 monthly in a vendor article","note":"Unconfirmed by current onboarding.","sourceUrl":"https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/"}],"revenueShare":"Separate publisher agreement sets share; not public","paymentTerms":"Net 45 under 2021 terms","paymentThreshold":"$50 under 2021 terms","paymentMethods":["Direct deposit","Wire transfer","PayPal"],"sources":[{"label":"Small-publisher article","url":"https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/"},{"label":"Terms (revised 2021)","url":"https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf"},{"label":"Onboarding","url":"https://www.adpushup.com/publisher/get-started/"}],"minTraffic":null}, + "amazon-publisher-services": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"UAM fee","value":"10%","note":"Stated in 2023 FAQ; verify because current page does not repeat the rate.","sourceUrl":"https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf"},{"label":"Payment minimum","value":"$5 USD","note":"Current UAM product page confirms.","sourceUrl":"https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html"},{"label":"Pay day","value":"Net 60","note":"Current UAM product page confirms.","sourceUrl":"https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html"}],"joining":[{"label":"Application","value":"Invitation only; approved invite code and site.","sourceUrl":"https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html"},{"label":"Must connect","value":"Google Ad Manager; publisher directly or exclusively represents the site.","sourceUrl":"https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html"},{"label":"Geography","value":"Worldwide availability; bidder demand varies by country.","sourceUrl":"https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html"}],"revenueShare":null,"paymentTerms":"Net 60","paymentThreshold":"$5 USD","paymentMethods":[],"sources":[{"label":"UAM FAQ / fee terms","url":"https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf"},{"label":"Current UAM page","url":"https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html"}],"minTraffic":null}, + "anymind-anymanager": {"checkedAt":"2026-10-22","keyNumbers":[],"joining":[{"label":"Product fit","value":"Web/app monetization with 150+ ad-serving partners, SDK, video and PMP.","sourceUrl":"https://anymindgroup.com/products/anymanager/"},{"label":"Application","value":"Contact AnyMind; no self-serve entry gate found.","sourceUrl":"https://anymindgroup.com/products/anymanager/"},{"label":"Regional fit","value":"APAC is the clearest published focus; broader coverage also offered.","sourceUrl":"https://anymindgroup.com/case-study/?business=publishergrowth&pa=2"},{"label":"Must connect","value":"AnyManager tag for web or SDK for apps","sourceUrl":"https://anymindgroup.com/news/press-release/anymanagergames-launch/"}],"revenueShare":"Fixed percentage agreed per publisher; not public","paymentTerms":null,"paymentThreshold":null,"paymentMethods":[],"sources":[{"label":"AnyMind IR FAQ","url":"https://anymindgroup.com/ir/faq/"},{"label":"AnyManager overview","url":"https://anymindgroup.com/news/press-release/11388/"},{"label":"AnyManager Games launch and SDK","url":"https://anymindgroup.com/news/press-release/anymanagergames-launch/"},{"label":"AnyManager AI reporting and integration overview","url":"https://anymindgroup.com/news/press-release/anymanager-ai-reporting-agent"},{"label":"AnyManager product","url":"https://anymindgroup.com/products/anymanager/"},{"label":"Publisher cases","url":"https://anymindgroup.com/case-study/?business=publishergrowth&pa=2"},{"label":"AnyManager terms","url":"https://anymanager.io/terms-of-service/"}],"minTraffic":null}, + "buysellads-carbon-ads": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Withdrawal balance","value":"$1","note":"Method minimums: $20 PayPal, $50 check, $500 wire; fees may apply.","sourceUrl":"https://www.carbonads.net/faq"},{"label":"Earnings timing","value":"30 / 60 days","note":"Posted within 30 days of month-end; withdrawable within 60 days.","sourceUrl":"https://www.carbonads.net/faq"}],"joining":[{"label":"Application","value":"Invite-only; review usually 5–7 business days.","note":"Reviews traffic, relevance, maintenance and capacity.","sourceUrl":"https://www.carbonads.net/faq"},{"label":"Audience","value":"English-speaking developer/design audience; US, Canada, Europe strongest.","note":"Other areas depend on demand.","sourceUrl":"https://www.carbonads.net/faq"},{"label":"Exclusivity","value":"Carbon must be the only ads on the site; no backfill.","note":"Replacement, not add-on.","sourceUrl":"https://www.carbonads.net/faq"},{"label":"Traffic","value":"Monthly pageviews reviewed; no fixed minimum.","sourceUrl":"https://www.carbonads.net/faq"},{"label":"Visitor location","value":"Strongest demand is for English-speaking developer and design audiences in the US, Canada, and Europe; other regions depend on demand","note":"This is a demand profile, not an exclusive country list.","sourceUrl":"https://www.carbonads.net/faq"},{"label":"Content","value":"Sites are reviewed for ad relevance and whether they are actively maintained","sourceUrl":"https://www.carbonads.net/faq"},{"label":"Must connect","value":"Use the Carbon Tag or API","sourceUrl":"https://www.buysellads.com/publishers"},{"label":"Placement","value":"Exclusive placement","sourceUrl":"https://www.carbonads.net/faq"}],"revenueShare":null,"paymentTerms":"Earnings posted monthly within 30 days; withdrawal within 60 days","paymentThreshold":"$1 before method minimums","paymentMethods":["PayPal","Check","Wire transfer","Open Collective, quarterly by request"],"sources":[{"label":"FAQ","url":"https://www.carbonads.net/faq"},{"label":"Join","url":"https://www.carbonads.net/join"},{"label":"Placement policy","url":"https://www.carbonads.net/placement-policy"},{"label":"Carbon API guide","url":"https://www.carbonads.net/docs"},{"label":"BuySellAds publisher page","url":"https://www.buysellads.com/publishers"},{"label":"About","url":"https://www.carbonads.net/about"}],"minTraffic":null}, + "clickio": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Indicative traffic guide","value":"100,000–1,000,000 monthly pageviews","note":"Country-specific Fully Managed guide; not guaranteed approval.","sourceUrl":"https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards"},{"label":"Below-guide route","value":">$500 monthly ad revenue","note":"May require proof for 3 consecutive months.","sourceUrl":"https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards"},{"label":"Pay day","value":"Net 60","note":"Some demand partners may offer Net30.","sourceUrl":"https://docs.clickio.com/books/get-started/page/payments-billing"}],"joining":[{"label":"Traffic","value":"100k PV UK/France/US/Australia/Canada; 250k Italy/Spain; 300k rest Europe; 500k Portugal; 750k Brazil/Colombia/Mexico; 1m rest LatAm/world.","note":"Indicative guide.","sourceUrl":"https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards"},{"label":"Revenue alternative","value":">$500 monthly ad revenue below regional guide.","note":"May require proof for 3 consecutive months.","sourceUrl":"https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards"},{"label":"Verification","value":"Six months of GA reports may be used if other verification unavailable.","note":"Evidence window, not domain-age rule.","sourceUrl":"https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards"},{"label":"Technical","value":"ads.txt, IAB-approved CMP, >50% viewability; follow AdSense policy.","sourceUrl":"https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards"},{"label":"Visitor location","value":"Sanctioned countries excluded","note":"Traffic thresholds vary by region.","sourceUrl":"https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards"},{"label":"Content","value":"Follow AdSense policies and third-party rights rules","note":"Adult, shocking, or racially intolerant content cannot be monetized.","sourceUrl":"https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards"},{"label":"Analytics history","value":"Six months of analytics history may be requested","sourceUrl":"https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards","note":"Reporting evidence, not a site-age minimum."},{"label":"Ad revenue","value":"More than $500 monthly ad revenue","note":"Below the traffic guide; verification may require at least $500 in each of three consecutive months.","sourceUrl":"https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards"}],"joinSummary":"Country guide varies; below-guide route is >$500 monthly ad revenue, potentially verified across three months","revenueShare":"Variable by demand-partner tariff","paymentTerms":"Net 60; some demand partners Net30","paymentThreshold":"$100 ACH/eCheck/SEPA/check/PayPal; $200 wire; $10 WebMoney; GBP100 Payoneer","paymentMethods":["ACH","eCheck","SEPA","Wire","Check","PayPal","WebMoney","Payoneer"],"sources":[{"label":"Entry standards","url":"https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards"},{"label":"Payments","url":"https://docs.clickio.com/books/get-started/page/payments-billing"},{"label":"Publisher agreement","url":"https://legal.clickio.com/PublisherAgreement/"},{"label":"How to join Clickio","url":"https://docs.clickio.com/books/get-started/chapter/how-to-join-clickio"}],"minTraffic":null}, + "concert": {"checkedAt":"2026-10-22","keyNumbers":[],"joining":[{"label":"Product","value":"Publisher-led curated SSP for premium publisher inventory.","sourceUrl":"https://www.voxmedia.com/2022/6/7/23157157/vox-media-concert-ssp-publisher-led-supply-side-platform-trade-desk-as-an-exclusive-launch-partner/"},{"label":"Application","value":"No public publisher form or qualification page found.","note":"Available terms were advertiser-facing.","sourceUrl":"https://admanager.concert.io/terms"},{"label":"Publisher fit","value":"Launch examples are established media groups; examples are not an admission minimum.","sourceUrl":"https://www.voxmedia.com/about-vox-media/2018/5/31/17413008/top-digital-publishers-join-concert-to-create-largest-premium-advertising-marketplace-online/"}],"revenueShare":null,"paymentTerms":null,"paymentThreshold":null,"paymentMethods":[],"sources":[{"label":"SSP launch","url":"https://www.voxmedia.com/2022/6/7/23157157/vox-media-concert-ssp-publisher-led-supply-side-platform-trade-desk-as-an-exclusive-launch-partner/"},{"label":"Advertiser terms","url":"https://admanager.concert.io/terms"},{"label":"Concert media kit","url":"https://cdn.vox-cdn.com/uploads/chorus_asset/file/22462899/Media_Kit_April_2021pdf.pdf"},{"label":"Publisher group","url":"https://www.voxmedia.com/about-vox-media/2018/5/31/17413008/top-digital-publishers-join-concert-to-create-largest-premium-advertising-marketplace-online/"}],"minTraffic":null}, + "ethicalads": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Traffic","value":"50,000 monthly pageviews","note":"Exceptions may be considered for close/fast-growing high-quality developer sites.","sourceUrl":"https://www.ethicalads.io/publishers/faq/"},{"label":"Share","value":"70%","note":"Published publisher policy.","sourceUrl":"https://www.ethicalads.io/publisher-policy/"},{"label":"Payment minimum","value":"$50","note":"Monthly target by the 15th.","sourceUrl":"https://www.ethicalads.io/publisher-policy/"}],"joining":[{"label":"Traffic","value":"At least 50k PV/month; discretionary exception path for close-fit developer sites.","sourceUrl":"https://www.ethicalads.io/publishers/faq/"},{"label":"Audience","value":"Developer-focused: software, OSS, DevOps, security, data science.","sourceUrl":"https://www.ethicalads.io/publisher-guide/"},{"label":"Placement","value":"One EthicalAds placement per page; no simultaneous competing ad on that page.","sourceUrl":"https://www.ethicalads.io/publisher-policy/"},{"label":"Content","value":"Developer-focused sites that meet the publisher policy","note":"The policy sets ad placement and click-through requirements","sourceUrl":"https://www.ethicalads.io/publishers/faq/"},{"label":"Must connect","value":"Install the EthicalAds ad client after applying","sourceUrl":"https://www.ethicalads.io/publisher-guide/"}],"revenueShare":"70%","paymentTerms":"Monthly, target by 15th","paymentThreshold":"$50","paymentMethods":["PayPal","Open Collective","GitHub Sponsors","Stripe Connect/bank transfer"],"sources":[{"label":"FAQ","url":"https://www.ethicalads.io/publishers/faq/"},{"label":"Policy","url":"https://www.ethicalads.io/publisher-policy/"},{"label":"Guide","url":"https://www.ethicalads.io/publisher-guide/"},{"label":"Terms","url":"https://www.ethicalads.io/terms-of-service/"}],"minTraffic":{"amount":50000,"unit":"pageviews"},"joinSummary":"50,000 pageviews a month; close-fit developer sites may receive an exception"}, + "ezoic": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"New-site gate","value":"250,000 monthly active users","note":"MAU, not PV or sessions.","sourceUrl":"https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES"},{"label":"Share","value":"At least 82%","note":"Net display-ad revenue unless separate agreement.","sourceUrl":"https://www.ezoic.com/terms"},{"label":"Payment minimum","value":"$20","note":"Published terms.","sourceUrl":"https://www.ezoic.com/terms"}],"joining":[{"label":"Traffic","value":"New sites generally need 250k MAU; do not convert to PV/sessions.","sourceUrl":"https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES"},{"label":"Incubator","value":"Up to 20 sites/month; discretionary review based on growth, site value, backend quality and publisher profile.","sourceUrl":"https://support.ezoic.com/kb/article/ezoic-incubator-program"},{"label":"Grandfathering","value":"Sites monetizing before 2026-02-19 may retain access with continuous integration; >7-day removal can end status.","sourceUrl":"https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES"},{"label":"Content/tech","value":"Original supported-language content, Google policies and JavaScript integration; AdSense approval generally not required.","sourceUrl":"https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES"},{"label":"Google standing","value":"Comply with Google and AdSense policies; AdSense approval is not required for most sites","sourceUrl":"https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES"},{"label":"Must connect","value":"Connect Google Analytics for traffic verification and Google MCM; integrate JavaScript","sourceUrl":"https://support.ezoic.com/kb/article/ezoic-site-requirements-for-monetization"},{"label":"Approval time","value":"Ezoic review usually finishes within 10 days; Google MCM review can take up to 18 days","sourceUrl":"https://support.ezoic.com/kb/article/ezoic-site-requirements-for-monetization"}],"revenueShare":"At least 82% of net display-ad revenue","paymentTerms":"About 35 days after advertiser payment; payment help also describes Net30 and optional longer cycles","paymentThreshold":"$20","paymentMethods":["Wise","PayPal","Payoneer","Check"],"sources":[{"label":"Requirements","url":"https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES"},{"label":"Site requirements and review timing","url":"https://support.ezoic.com/kb/article/ezoic-site-requirements-for-monetization"},{"label":"Terms","url":"https://www.ezoic.com/terms"},{"label":"Payment help","url":"https://support.ezoic.com/kb/article/ezoic-payments?lang=en-US"},{"label":"Incubator","url":"https://support.ezoic.com/kb/article/ezoic-incubator-program"},{"label":"Payment help","url":"https://support.ezoic.com/kb/article/ezoic-payment-schedule-and-thresholds"}],"minTraffic":{"amount":250000,"unit":"monthly active users","label":"250,000 monthly active users"},"joinSummary":"250k monthly active users for new sites; limited Incubator below gate"}, + "freestar": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Typical scale","value":"About 1m monthly pageviews","note":"Typical, not a hard floor.","sourceUrl":"https://freestar.com/publisher-quality-requirements/"},{"label":"Target-market share","value":"50%","note":"US/UK/Canada/NZ/Australia.","sourceUrl":"https://freestar.com/publisher-quality-requirements/"},{"label":"Organic audience","value":"50%","note":"Includes social, News/Discover, YouTube, Reddit and syndication—not only search.","sourceUrl":"https://freestar.com/publisher-quality-requirements/"}],"joining":[{"label":"Traffic","value":"Typically about 1m PV/mo; all sizes can apply.","note":"Typical scale, not cutoff.","sourceUrl":"https://freestar.com/contact-us/"},{"label":"Geography","value":"At least half from US/UK/Canada/NZ/Australia.","sourceUrl":"https://freestar.com/publisher-quality-requirements/"},{"label":"Traffic source","value":"At least 50% from organic audiences; includes social/news/video/community/syndication.","sourceUrl":"https://freestar.com/publisher-quality-requirements/"},{"label":"Content","value":"Original, human-focused, mostly long-form, brand-safe; GA4 and history requested.","sourceUrl":"https://freestar.com/publisher-quality-requirements/"},{"label":"Google standing","value":"Good standing with all major ad providers","sourceUrl":"https://freestar.com/publisher-quality-requirements/"},{"label":"Must connect","value":"Provide GA4 access, traffic and revenue history, and demand-partner status","sourceUrl":"https://freestar.com/publisher-quality-requirements/"},{"label":"Approval time","value":"About 3 to 6 weeks from kickoff to launch","note":"This is onboarding-to-launch timing, not review time alone.","sourceUrl":"https://freestar.com/contact-us/"}],"revenueShare":null,"paymentTerms":null,"paymentThreshold":null,"paymentMethods":[],"sources":[{"label":"Quality requirements","url":"https://freestar.com/publisher-quality-requirements/"},{"label":"Contact/onboarding","url":"https://freestar.com/contact-us/"}],"minTraffic":null}, + "geniee-ssp": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Payment minimum","value":"$100 PayPal/Payoneer; $200 wire","note":"From earlier publisher terms; 2025 English terms did not reconfirm the threshold.","sourceUrl":"https://s.geniee.jp/aladdin/resources/GenieeInternational/terms_geniee_en.pdf"},{"label":"Payment timing","value":"Two months","note":"By the end of the second month after calculation; older published terms.","sourceUrl":"https://geniee.co.jp/doc/terms_of_service_en20250831.pdf"}],"joining":[{"label":"Application","value":"Submit publisher signup and accurate site details.","sourceUrl":"https://admin.genieessp.com/app/signup/en_US"},{"label":"Traffic","value":"No public numeric floor located.","sourceUrl":"https://geniee.co.jp/doc/terms_of_service_en20250831.pdf"},{"label":"Content","value":"No false, obscene, infringing or illegal material.","sourceUrl":"https://geniee.co.jp/doc/terms_of_service_en20250831.pdf"},{"label":"Integration","value":"Install and retain Geniee tags.","sourceUrl":"https://geniee.co.jp/doc/terms_of_service_en20250831.pdf"}],"revenueShare":null,"paymentTerms":"Current 2025 terms: transfer by end of second month after calculation, conditional on advertiser payment.","paymentThreshold":"Earlier terms: $100 PayPal/Payoneer; $200 wire; current 2025 terms do not reconfirm","paymentMethods":["Bank transfer (current 2025 terms)","PayPal (current 2025 terms)","Payoneer (listed in earlier terms; not reconfirmed)","Wire transfer (listed in earlier terms; not reconfirmed)"],"sources":[{"label":"English publisher terms, older","url":"https://s.geniee.jp/aladdin/resources/GenieeInternational/terms_geniee_en.pdf"},{"label":"Publisher signup","url":"https://admin.genieessp.com/app/signup/en_US"},{"label":"Publisher terms, 2025","url":"https://geniee.co.jp/doc/terms_of_service_en20250831.pdf"},{"label":"SSP overview","url":"https://en.geniee.co.jp/services/publishers/"}],"minTraffic":null}, + "google-adsense": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Publisher share","value":"80%","note":"For AdSense for Content after advertiser platform fee; about 68% with Google Ads demand.","sourceUrl":"https://support.google.com/adsense/answer/180195?hl=en"},{"label":"Payment minimum","value":"$100 USD","note":"Equivalent thresholds vary by account currency.","sourceUrl":"https://support.google.com/adsense/answer/1709871?hl=en"},{"label":"Pay day","value":"21st–26th each month","note":"When balance reaches payment threshold and no holds.","sourceUrl":"https://support.google.com/adsense/answer/7164701?hl=en"}],"joining":[{"label":"Traffic","value":"No numeric traffic rule on current eligibility checklist.","note":"This page does not promise that no minimum exists.","sourceUrl":"https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk"},{"label":"Content","value":"Original, high-quality content and publisher-policy compliance.","sourceUrl":"https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk"},{"label":"Applicant","value":"18+, or adult representative; must own/control site HTML and be in a supported signup country.","sourceUrl":"https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk"},{"label":"Review","value":"Usually days; sometimes 2–4 weeks; finish setup within 6 months.","sourceUrl":"https://support.google.com/adsense/answer/7402256?hl=en-AG"},{"label":"Visitor location","value":"Sign-up is available in listed countries","sourceUrl":"https://support.google.com/adsense/answer/13402307?hl=en"},{"label":"Google standing","value":"No account termination for invalid traffic or policy violations","sourceUrl":"https://support.google.com/adsense/answer/81904?hl=en"},{"label":"Must connect","value":"Access to the site HTML","note":"Add the verification code or ad code and request a site review","sourceUrl":"https://support.google.com/adsense/answer/7584263?hl=en"}],"revenueShare":"80% after advertiser platform fee for AdSense for Content","paymentTerms":"Monthly; issued 21st–26th after threshold and holds clear","paymentThreshold":"$100 USD or account-currency equivalent","paymentMethods":["Check","EFT","SEPA","Wire","PayPal Hyperwallet where available"],"sources":[{"label":"Share","url":"https://support.google.com/adsense/answer/180195?hl=en"},{"label":"Payment threshold","url":"https://support.google.com/adsense/answer/1709871?hl=en"},{"label":"Payment schedule","url":"https://support.google.com/adsense/answer/7164701?hl=en"},{"label":"Eligibility","url":"https://support.google.com/adsense/answer/9724?hl=en"},{"label":"Signup countries","url":"https://support.google.com/adsense/answer/13402307?hl=en"},{"label":"Account restrictions after invalid traffic or policy termination","url":"https://support.google.com/adsense/answer/81904?hl=en"},{"label":"Site review timing","url":"https://support.google.com/adsense/answer/7402256?hl=en"},{"label":"Site verification and review steps","url":"https://support.google.com/adsense/answer/7584263?hl=en"},{"label":"Payment methods","url":"https://support.google.com/adsense/answer/1714397?hl=en-EN"},{"label":"Eligibility","url":"https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk"},{"label":"Activation and review","url":"https://support.google.com/adsense/answer/7402256?hl=en-AG"}],"minTraffic":null}, + "infolinks": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Traffic","value":"No minimum PV or visitor count","note":"Current official support result says all publisher sizes can apply.","sourceUrl":"https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks"},{"label":"Payment minimum","value":"$50 / $100","note":"Most methods / wire or Western Union, respectively.","sourceUrl":"https://sites0001.infolinks.com/support/payments/what-are-my-payment-options"},{"label":"Pay timing","value":"45 days after month-end","note":"Service agreement says 45 working days; current help says 45 days after month-end—contract is older.","sourceUrl":"https://sites0001.infolinks.com/service-agreement"}],"joining":[{"label":"Traffic","value":"No PV/visitor minimum; every site reviewed and may be declined.","sourceUrl":"https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks"},{"label":"Review","value":"Usually within 48 hours.","sourceUrl":"https://sites0001.infolinks.com/support/account/how-do-i-sign-up-as-an-infolinks-publisher"},{"label":"Content","value":"No illegal, adult/offensive, hateful or infringing content.","sourceUrl":"https://sites0001.infolinks.com/service-agreement"},{"label":"Integration","value":"Install Infolinks JavaScript after approval.","sourceUrl":"https://sites0001.infolinks.com/support/integration/how-do-i-integrate-infolinks-into-my-website"},{"label":"Google standing","value":"Publisher or related entities must not have been terminated by another monetization platform in the prior 24 months","note":"The agreement names Google AdSense as an example.","sourceUrl":"https://sites0001.infolinks.com/service-agreement"}],"revenueShare":"70% for In-Text ads under 2015 agreement; other format rates vary","paymentTerms":"45 working days after month-end under 2015 agreement","paymentThreshold":"$50 most methods; $100 wire/Western Union","paymentMethods":["PayPal","Bank wire","eCheck","ACH","Payoneer","Western Union"],"sources":[{"label":"Eligibility","url":"https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks"},{"label":"Publisher agreement (2015)","url":"https://sites0001.infolinks.com/service-agreement"},{"label":"Signup","url":"https://sites0001.infolinks.com/support/account/how-do-i-sign-up-as-an-infolinks-publisher"},{"label":"Integration","url":"https://sites0001.infolinks.com/support/integration/how-do-i-integrate-infolinks-into-my-website"},{"label":"Payments","url":"https://sites0001.infolinks.com/support/payments/what-are-my-payment-options"},{"label":"Payment thresholds","url":"https://sites0001.infolinks.com/support/payments/what-is-the-infolinks-payment-threshold"},{"label":"Payment fees","url":"https://sites0001.infolinks.com/support/payments/do-i-pay-fees-when-receiving-my-infolinks-payment"}],"minTraffic":{"amount":0,"unit":"pageviews"}}, + "journey-by-mediavine": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Sessions to apply","value":"1,000 Tier 1 sessions in 30 days","note":"Current Mediavine application requirement for Journey.","sourceUrl":"https://www.mediavine.com/application-requirements/"},{"label":"Share","value":"70%","note":"Journey publisher share.","sourceUrl":"https://www.journeymv.com/getting-started-with-journey-by-mediavine/"},{"label":"Pay day","value":"Net 65","note":"Journey schedule.","sourceUrl":"https://www.journeymv.com/getting-started-with-journey-by-mediavine/"}],"joining":[{"label":"Traffic","value":"At least 1k Tier 1 sessions in 30 days.","sourceUrl":"https://www.mediavine.com/application-requirements/"},{"label":"Setup","value":"Run Grow for at least 30 days; GA4 is optional.","sourceUrl":"https://www.journeymv.com/getting-started-with-journey-by-mediavine/"},{"label":"Site age","value":"The 2024 getting-started guide describes four months of domain history","sourceUrl":"https://www.journeymv.com/getting-started-with-journey-by-mediavine/","note":"Dated ad-partner guidance; confirm whether the current application still applies this condition."},{"label":"Review","value":"Original, human, brand-safe audience; Google account in good standing.","sourceUrl":"https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine/"},{"label":"Visitor location","value":"Journey Tier 1 countries","sourceUrl":"https://www.mediavine.com/application-requirements/","note":"The application names US, Canada, UK and Australia as examples."},{"label":"Content","value":"Original, engaging, human-written, brand-safe, regularly updated content","sourceUrl":"https://www.journeymv.com/affiliates-faq/"},{"label":"Google standing","value":"No active AdSense or Ad Exchange policy issues","sourceUrl":"https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine/"}],"revenueShare":"70%","paymentTerms":"Net 65","paymentThreshold":null,"paymentMethods":[],"sources":[{"label":"Current requirements","url":"https://www.mediavine.com/application-requirements/"},{"label":"Approval criteria","url":"https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine/"},{"label":"Journey setup and terms","url":"https://www.journeymv.com/getting-started-with-journey-by-mediavine/"},{"label":"Journey FAQ","url":"https://www.journeymv.com/affiliates-faq/"},{"label":"Journey publisher page and supported regions","url":"https://get.journeymv.com/start-your-journey-1/"}],"joinSummary":"1,000 Tier 1 sessions in 30 days","minTraffic":null}, + "media-net": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Pay day","value":"Net 30","note":"Current publisher agreement says monthly payment for collected click-through revenue.","sourceUrl":"https://www.media.net/legal/"}],"joining":[{"label":"Traffic source","value":"Primarily organic traffic; no public numeric floor.","sourceUrl":"https://www.media.net/legal/inventorypolicies/"},{"label":"Content","value":"Original, high-quality, navigable; restricted content excluded.","sourceUrl":"https://www.media.net/legal/inventorypolicies/"},{"label":"Ads.txt","value":"Authorized ads.txt/app-ads.txt required.","sourceUrl":"https://www.media.net/legal/inventorypolicies/"},{"label":"Traffic","value":"Mostly organic traffic","sourceUrl":"https://www.media.net/legal/inventorypolicies/"},{"label":"Must connect","value":"Publish an authorized ads.txt or app-ads.txt file","sourceUrl":"https://www.media.net/legal/inventorypolicies/"},{"label":"Prior provider history","value":"No prior suspension or termination by another monetization provider","sourceUrl":"https://www.media.net/legal/","note":"The agreement also requires disclosure of specified prior traffic or policy suspensions"}],"revenueShare":null,"paymentTerms":"Net 30 monthly on collected click-through revenue","paymentThreshold":null,"paymentMethods":[],"sources":[{"label":"Publisher agreement","url":"https://www.media.net/legal/"},{"label":"Inventory policy","url":"https://www.media.net/legal/inventorypolicies/"},{"label":"Publisher page","url":"https://www.media.net/publishers"}],"minTraffic":null}, + "mediavine": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Official revenue gate","value":"$5,000","note":"Site ad revenue in the previous calendar year; not last month or trailing 12 months.","sourceUrl":"https://help.mediavine.com/programs-and-the-publisher-path-to-growth"},{"label":"Official share","value":"75%","note":"For new Official sites in 2026; Select/Signature/Premiere tiers are higher and legacy terms differ.","sourceUrl":"https://help.mediavine.com/revenue-share"},{"label":"Pay day","value":"Net 65","note":"Processed from month end.","sourceUrl":"https://help.mediavine.com/when-am-i-getting-paid-0"}],"joining":[{"label":"Revenue","value":"At least $5k site ad revenue in previous calendar year.","sourceUrl":"https://help.mediavine.com/programs-and-the-publisher-path-to-growth"},{"label":"Content","value":"Original, audience-first, human and brand-safe; traffic sources and demographics reviewed.","sourceUrl":"https://help.mediavine.com/mediavine-official"},{"label":"Google standing","value":"Good standing with AdSense and Ad Exchange; no active policy issues.","sourceUrl":"https://help.mediavine.com/mediavine-official"},{"label":"Traffic","value":"No separate public PV/session gate for Official; revenue rule controls.","sourceUrl":"https://help.mediavine.com/programs-and-the-publisher-path-to-growth"},{"label":"Application","value":"Provide analytics and allow site review; exact verification may vary.","sourceUrl":"https://prod.mediavine.com/blog/mediavine-application-process-faq/"},{"label":"Visitor location","value":"No fixed mix; traffic origin is reviewed","note":"Mediavine evaluates traffic location, sources, and demographics","sourceUrl":"https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine"},{"label":"Must connect","value":"Provide read-only Google Analytics access during review","sourceUrl":"https://prod.mediavine.com/blog/mediavine-application-process-faq/"}],"revenueShare":"75% for new Official sites in 2026; 80% Select, 85% Signature, 90% Premiere/Premiere Plus; legacy differs","paymentTerms":"Net 65 from month end; processed first business day","paymentThreshold":"$100 most methods; $200 eCheck/local transfer","paymentMethods":["PayPal","Domestic ACH","Wise","US wire","eCheck/local bank transfer","International wire"],"sources":[{"label":"Mediavine application requirements","url":"https://www.mediavine.com/application-requirements/"},{"label":"Approval criteria, including Journey","url":"https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine"},{"label":"2026 programs and revenue eligibility","url":"https://www.mediavine.com/programs/"},{"label":"Revenue share","url":"https://help.mediavine.com/revenue-share"},{"label":"Payment timing","url":"https://help.mediavine.com/when-am-i-getting-paid-0"},{"label":"Payment methods","url":"https://help.mediavine.com/mediavine-payment-methods"},{"label":"Application and Google Analytics access","url":"https://prod.mediavine.com/blog/mediavine-application-process-faq/"},{"label":"Google MCM onboarding","url":"https://help.mediavine.com/google-mcm-what-you-need-to-know"},{"label":"Publisher Path and previous-year revenue","url":"https://help.mediavine.com/programs-and-the-publisher-path-to-growth"},{"label":"Official criteria","url":"https://help.mediavine.com/mediavine-official"}],"joinSummary":"$5,000 in site ad revenue in the prior calendar year","minTraffic":null}, + "mgid": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Visitor routes","value":"3,000 / 90,000","note":"Daily unique visitors OR monthly visitors, respectively.","sourceUrl":"https://help.mgid.com/publishers-general-information"},{"label":"Publisher share","value":"65% in Brazil offer","note":"Offer-specific; current Insertion Order controls global terms.","sourceUrl":"https://pr.mgid.com/monetize"},{"label":"Payment minimum","value":"$50–$1,000","note":"Method-specific in Brazil offer; not a universal threshold.","sourceUrl":"https://pr.mgid.com/monetize"}],"joining":[{"label":"Traffic","value":"3,000 daily unique visitors OR 90,000 monthly visitors.","sourceUrl":"https://help.mgid.com/publishers-general-information"},{"label":"Content","value":"10 current articles; original, policy compliant, no adult/torrent/redirect/low-info content.","sourceUrl":"https://help.mgid.com/publishers-general-information"},{"label":"Geography","value":"No traffic-source/country limitation in help; social visitors accepted; 70+ languages/200+ countries.","sourceUrl":"https://help.mgid.com/publishers-general-information"},{"label":"Review","value":"Usually email response within 24 hours; weekend to next business day.","sourceUrl":"https://help.mgid.com/publishers-general-information"},{"label":"Must connect","value":"Install MGID ad-unit code using the Dashboard instructions","sourceUrl":"https://www.mgid.com/services/publishers-tos"}],"revenueShare":"65% in Brazil offer; current insertion order controls","paymentTerms":"Net30 post-payment in Brazil offer; current insertion order controls","paymentThreshold":"Offer-specific: $50 Paymaster24; $100 PayPal/Tipalti; $1,000 ACH/international transfer","paymentMethods":["Paymaster24","PayPal","Tipalti","ACH","International transfer"],"sources":[{"label":"Publisher information","url":"https://help.mgid.com/publishers-general-information"},{"label":"Publisher terms updated July 2026","url":"https://www.mgid.com/services/publishers-tos"},{"label":"Brazil publisher offer","url":"https://pr.mgid.com/monetize"},{"label":"Publisher program","url":"https://www.mgid.com/publishers"},{"label":"Older publisher requirements, last updated 2020","url":"https://www.mgid.com/services/publisher-requirements"}],"minTraffic":null,"joinSummary":"3,000 unique visitors a day OR 90,000 visitors a month"}, + "monetizemore-pubguru": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Entry alternatives","value":"$5,000 / 2M","note":"Monthly ad revenue OR monthly pageviews, respectively.","sourceUrl":"https://www.monetizemore.com/solutions/pubguru-premium/"},{"label":"Revenue share","value":"Custom performance-based share","note":"Rate not public.","sourceUrl":"https://www.monetizemore.com/frequently-asked-questions/"}],"joining":[{"label":"Traffic","value":"PubGuru Premium: 2m monthly PV OR $5k monthly ad revenue.","sourceUrl":"https://www.monetizemore.com/solutions/pubguru-premium/"},{"label":"Product fit","value":"Managed yield optimization for larger, growing publishers.","sourceUrl":"https://www.monetizemore.com/solutions/pubguru-premium/"},{"label":"Terms","value":"Share and contract scope are set per publisher; confirm lock-in/notice in signed agreement.","sourceUrl":"https://www.monetizemore.com/frequently-asked-questions/"},{"label":"Must connect","value":"Flexible setup through the publisher’s Google Ad Manager and demand partners","note":"Product setup detail, not a separate eligibility rule.","sourceUrl":"https://www.monetizemore.com/blog/header-bidding-platforms/"},{"label":"Ad revenue","value":"$5,000 a month","note":"Alternative to 2,000,000 monthly pageviews.","sourceUrl":"https://www.monetizemore.com/solutions/pubguru-premium/"}],"joinSummary":"$5,000 monthly ad revenue OR 2 million monthly pageviews","revenueShare":"Custom performance share; no fixed percentage public","paymentTerms":null,"paymentThreshold":null,"paymentMethods":[],"sources":[{"label":"PubGuru Premium requirements","url":"https://www.monetizemore.com/solutions/pubguru-premium/"},{"label":"PubGuru and header-bidding setup","url":"https://www.monetizemore.com/blog/header-bidding-platforms/"},{"label":"MonetizeMore revenue model","url":"https://www.monetizemore.com/blog/ezoic-vs-adsense-vs-monetizemore/"},{"label":"MonetizeMore FAQ","url":"https://www.monetizemore.com/frequently-asked-questions/"},{"label":"Publisher case","url":"https://www.monetizemore.com/case-study/if-publab-can-5x-their-ad-revenue-using-pubguru-so-can-you/"}],"minTraffic":{"amount":2000000,"unit":"pageviews"}}, + "monumetric": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Propel traffic","value":"10,000–80,000 pageviews/month","note":"At least 3 consecutive months; other programs have higher ranges.","sourceUrl":"https://www.monumetric.com/monumetric-program-overview/"},{"label":"Payment minimum","value":"$10","note":"Balance carries forward if below minimum.","sourceUrl":"https://www.monumetric.com/payment-terms-and-how-you-are-paid/"},{"label":"Pay day","value":"Net 60","note":"Paid monthly within first 10 business days.","sourceUrl":"https://www.monumetric.com/payment-terms-and-how-you-are-paid/"}],"joining":[{"label":"Traffic","value":"10k–80k PV/month for Propel for 3 consecutive months.","note":"No single-month shortcut.","sourceUrl":"https://www.monumetric.com/monumetric-program-overview/"},{"label":"Top markets","value":"At least 50% US/UK/Australia/Canada.","sourceUrl":"https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/"},{"label":"Content","value":"English; no pornography, drugs, hate or copyright violations.","sourceUrl":"https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/"},{"label":"Propel setup","value":"WordPress or Blogger, 300px sidebar, six ad slots, major-ad-provider approval, $99 implementation fee.","sourceUrl":"https://www.monumetric.com/requirements-for-the-propel-program/"}],"revenueShare":null,"paymentTerms":"Net 60; monthly within first 10 business days","paymentThreshold":"$10","paymentMethods":["US direct deposit","International PayPal"],"sources":[{"label":"Eligibility","url":"https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/"},{"label":"Propel requirements","url":"https://www.monumetric.com/requirements-for-the-propel-program/"},{"label":"Google MCM setup","url":"https://www.monumetric.com/what-googles-switch-to-mcm-means-for-publishers/"},{"label":"Payment terms","url":"https://www.monumetric.com/payment-terms-and-how-you-are-paid/"},{"label":"Program overview","url":"https://www.monumetric.com/monumetric-program-overview/"}],"joinSummary":"10,000 pageviews/month for 3 consecutive months (Propel)","minTraffic":{"amount":10000,"unit":"pageviews"}}, + "newor-media": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Catapult","value":"60,000","note":"US pageviews a month; Elevate has no pageview minimum.","sourceUrl":"https://newormedia.com/programs"},{"label":"Premier","value":"420,000","note":"US pageviews a month.","sourceUrl":"https://newormedia.com/programs"},{"label":"Pay timing","value":"Net 30 / Net 45","note":"Public FAQ says Net30; platform agreement says Net45—signed contract controls.","sourceUrl":"https://newormedia.com/faqs/what-are-your-payment-terms"}],"joining":[{"label":"Elevate traffic","value":"No pageview minimum; manual review.","note":"Current Elevate FAQ.","sourceUrl":"https://newormedia.com/elevatefaqs"},{"label":"Catapult/Premier","value":"60k and 420k US PV/month respectively.","sourceUrl":"https://newormedia.com/programs"},{"label":"Elevate criteria","value":"English site, navigation, Google policy alignment, at least two ad units/page, GAM account and exclusivity.","sourceUrl":"https://newormedia.com/elevatefaqs"},{"label":"Language conflict","value":"Aug 2025 blog says non-English sites may be accepted with 50% US/UK/Canada/Australia traffic; current Elevate FAQ says sites must be English.","note":"Program-specific FAQ is current; confirm in writing.","sourceUrl":"https://newormedia.com/blog/ad-monetization-onboarding-with-newor-media/"},{"label":"Visitor location","value":"Traffic origin is reviewed; no fixed country share stated","sourceUrl":"https://newormedia.com/elevatefaqs"},{"label":"Approval time","value":"Usually responds within 24 to 48 hours","note":"This is the stated response window, not a guaranteed approval time","sourceUrl":"https://newormedia.com/elevatefaqs"}],"revenueShare":null,"paymentTerms":"Net30 in FAQ; Net45 in platform agreement","paymentThreshold":null,"paymentMethods":["PayPal","Payoneer","Direct wire transfer"],"sources":[{"label":"Programs","url":"https://newormedia.com/programs"},{"label":"Elevate FAQ","url":"https://newormedia.com/elevatefaqs"},{"label":"Platform agreement","url":"https://newormedia.com/node/296"},{"label":"Payment terms FAQ","url":"https://newormedia.com/faqs/what-are-your-payment-terms"},{"label":"Payment methods FAQ","url":"https://newormedia.com/faqs/how-do-you-make-payments"},{"label":"2025 onboarding blog","url":"https://newormedia.com/blog/ad-monetization-onboarding-with-newor-media/"}],"joinSummary":"Elevate: no pageview minimum, but manual review, English, GAM and exclusivity","minTraffic":{"amount":0,"unit":"pageviews","label":"Elevate has no pageview minimum; individual review"}}, + "nitropay": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Pay day","value":"Net 7","sourceUrl":"https://nitropay.com/docs/"},{"label":"Payout minimum","value":"None","note":"above transaction fees","sourceUrl":"https://nitropay.com/docs/"},{"label":"Go-live time","value":"5–7 business days","note":"after your site is accepted","sourceUrl":"https://nitropay.com/docs/"}],"joining":[{"label":"Traffic","value":"Traffic amount, pageviews and sessions are reviewed; no numeric minimum is published","sourceUrl":"https://nitropay.com/docs/"},{"label":"Visitor location","value":"Traffic geography is reviewed; accepted regions are not listed","sourceUrl":"https://nitropay.com/docs/"},{"label":"Content","value":"Site content and niche are reviewed; guidelines bar adult, illegal, violent, or infringing content","sourceUrl":"https://blog.nitropay.com/guidelines/"},{"label":"Must connect","value":"Install Nitro ad tags and provide a Google Ad Manager network code for Google MCM; GA4 access can speed review","sourceUrl":"https://nitropay.com/docs/"},{"label":"Approval time","value":"Initial review time not published; after quality acceptance it averages 5–7 business days to enough SSP coverage for go-live","sourceUrl":"https://nitropay.com/docs/","note":"Post-acceptance activation, not application approval."}],"revenueShare":null,"paymentTerms":"Net 7; paid seven days after the start of each month","paymentThreshold":"No fixed minimum; earnings must exceed the transaction fee","paymentMethods":["ACH (US)","EFT (Canada)","FPS (UK)","NPP (Australia)","BECS (New Zealand)","FPSHK (Hong Kong)","SEPA (Europe)","IACH","SWIFT wire"],"sources":[{"label":"Nitro Docs Archive: approval, onboarding, and payments","url":"https://nitropay.com/docs/"},{"label":"Publisher Guidelines","url":"https://blog.nitropay.com/guidelines/"},{"label":"Publisher application form","url":"https://nitropay.com/publishers/"}],"minTraffic":null}, + "opti-digital": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Pay day, Managed Inventory","value":"Net 45","sourceUrl":"https://knowledge-base.optidigital.com/knowledge/understanding-your-payment-terms"},{"label":"Pay day, Managed Account","value":"Net 60","note":"for Opti demand; Google pays its own revenue on a 25-day cycle","sourceUrl":"https://knowledge-base.optidigital.com/knowledge/understanding-your-payment-terms"}],"joining":[{"label":"Traffic","value":"No universal numeric minimum published","sourceUrl":"https://optidigital.com/request-demo/"},{"label":"Must connect","value":"Demand Hub needs CMP, ads.txt, and bidder setup","note":"This is for the Demand Hub product; no general publisher sign-up requirement is stated.","sourceUrl":"https://knowledge-base.optidigital.com/knowledge/getting-started-with-demand-hub"},{"label":"Referral offer","value":"Referral-only conditions: tags live 3 months on most traffic, eligible geography, inventory quality, 3 ads/page, registered companies","sourceUrl":"https://optidigital.com/refer-a-publisher/"}],"revenueShare":"Share of gross programmatic revenue; percentage not public","paymentTerms":"Net 45 for Managed Inventory; Net 60 for Opti demand under Managed Account; Google pays direct on its 25-day cycle","paymentThreshold":null,"paymentMethods":[],"sources":[{"label":"Payment terms by setup","url":"https://knowledge-base.optidigital.com/knowledge/understanding-your-payment-terms"},{"label":"Revenue-share and invoice flow","url":"https://knowledge-base.optidigital.com/knowledge/how-is-the-invoicing-working-at-opti-digital-when-will-i-get-paid"},{"label":"Demand Hub publisher integration","url":"https://knowledge-base.optidigital.com/knowledge/getting-started-with-demand-hub"},{"label":"Opti Digital publisher referral page (referral terms only)","url":"https://optidigital.com/refer-a-publisher/"},{"label":"Publisher monetization review","url":"https://optidigital.com/request-demo/"}],"minTraffic":null}, + "playwire": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Traffic to join","value":"500,000","note":"monthly website pageviews; apps need 1,000 daily active users","sourceUrl":"https://www.playwire.com/faq"},{"label":"Your share","value":"50% / 75%","note":"of net direct-sales / indirect-sales revenue","sourceUrl":"https://www.playwire.com/terms-of-service"},{"label":"Pay day","value":"Net 60","sourceUrl":"https://www.playwire.com/terms-of-service"}],"joining":[{"label":"Traffic","value":"FAQ: 500,000 monthly pageviews or 1,000 app DAU; qualification page suggests applying around 100,000 PV for full ROI","note":"100K guidance is not a confirmed admission cutoff.","sourceUrl":"https://www.playwire.com/faq"},{"label":"Visitor location","value":"20% US traffic is linked to higher revenue, not a hard eligibility rule","note":"At least 20% US traffic is associated with higher average revenue, not stated as an eligibility minimum","sourceUrl":"https://www.playwire.com/qualification-criteria"},{"label":"Content","value":"Unique, original content; IVT rating no higher than 7%","sourceUrl":"https://www.playwire.com/faq"},{"label":"Google standing","value":"Not blacklisted by Google or other major ad providers","sourceUrl":"https://www.playwire.com/faq"},{"label":"Must connect","value":"Implement the Playwire SDK","note":"Required to access Playwire demand","sourceUrl":"https://www.playwire.com/faq"},{"label":"Application","value":"Apply Now branches by website/blog, mobile app, and desktop application.","sourceUrl":"https://www.playwire.com/apply"}],"revenueShare":"50% of net direct-sales revenue; 75% of net indirect-sales revenue","paymentTerms":"Net 60 after month-end; paid in US dollars","paymentThreshold":null,"paymentMethods":[],"sources":[{"label":"Publisher FAQ","url":"https://www.playwire.com/faq"},{"label":"Qualification criteria","url":"https://www.playwire.com/qualification-criteria"},{"label":"Publisher terms of service","url":"https://www.playwire.com/terms-of-service"},{"label":"Apply Now page","url":"https://www.playwire.com/apply"}],"minTraffic":{"amount":500000,"unit":"pageviews"},"joinSummary":"Websites: 500,000 monthly pageviews; apps: 1,000 daily active users"}, + "pubfuture": {"checkedAt":"2026-10-23","keyNumbers":[{"label":"Traffic to join","value":"100,000","note":"monthly pageviews","sourceUrl":"https://pubfuture.com/home"},{"label":"Pay day","value":"Net 30","note":"January earnings are released at the end of February.","sourceUrl":"https://pubfuture.com/home"}],"joining":[{"label":"Traffic","value":"At least 100,000 pageviews a month","sourceUrl":"https://pubfuture.com/home"},{"label":"Content","value":"Safe content with no nudity","sourceUrl":"https://pubfuture.com/home"},{"label":"Must connect","value":"Add PubFuture lines to ads.txt; tags work inside Google Ad Manager and other ad servers","sourceUrl":"https://pubfuture.com/home"},{"label":"Application","value":"Create a publisher account and submit the website for review","sourceUrl":"https://ssp.pubfuture.com/auth/signup"}],"revenueShare":null,"paymentTerms":"Net 30; January earnings released at the end of February","paymentThreshold":null,"paymentMethods":[],"sources":[{"label":"Publisher FAQ (JavaScript-rendered)","url":"https://pubfuture.com/home"},{"label":"H5 game vendor case study","url":"https://blog.pubfuture.com/the-secret-to-400-more-revenue-for-h5-game-sites-pubfutures-winning-formula/1007/"},{"label":"Publisher contact form","url":"https://pubfuture.com/contact"},{"label":"Publisher onboarding and ads.txt article","url":"https://blog.pubfuture.com/ads-txt-and-ad-revenue-what-every-publisher-should-know/1236/"},{"label":"Publisher sign-up form","url":"https://ssp.pubfuture.com/auth/signup"}],"minTraffic":{"amount":100000,"unit":"pageviews"}}, + "pubgalaxy": {"checkedAt":"2026-10-22","keyNumbers":[],"joining":[{"label":"Traffic","value":"No standalone PubGalaxy application; publisher supply migrated to Improve Digital","sourceUrl":"https://www.azerion.com/azerion-unifies-its-publisher-supply-business-under-improve-digital-launching-a-full-circle-solution-for-publishers/"},{"label":"Application","value":"No current PubGalaxy route; Improve Digital has separate Yield and SSP request-access routes","sourceUrl":"https://improvedigital.com/"}],"revenueShare":null,"paymentTerms":null,"paymentThreshold":null,"paymentMethods":[],"sources":[{"label":"Azerion announcement unifying publisher supply under Improve Digital","url":"https://www.azerion.com/azerion-unifies-its-publisher-supply-business-under-improve-digital-launching-a-full-circle-solution-for-publishers/"},{"label":"Current Improve Digital publisher offering","url":"https://improvedigital.com/"},{"label":"PubGalaxy official LinkedIn transition update","url":"https://gl.linkedin.com/company/pubgalaxy"}],"minTraffic":null,"joinSummary":"No standalone offer; migrated to Improve Digital"}, + "publift": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Revenue to join","value":"More than $2,000","note":"monthly ad revenue, in USD","sourceUrl":"https://www.publift.com/blog/publift-requirements"},{"label":"Revenue split","value":"80/20","note":"in Publift's 2026 comparison; confirm in your order","sourceUrl":"https://www.publift.com/blog/best-mediavine-alternatives"},{"label":"Payment minimum","value":"$200","sourceUrl":"https://www.publift.com/blog/the-best-cpm-ad-network-for-publishers"}],"joining":[{"label":"Traffic","value":"500,000 monthly pageviews is secondary; more than $2,000 monthly ad revenue is the main qualifying metric","note":"Monthly; revenue is the main qualifying metric.","sourceUrl":"https://www.publift.com/blog/publift-requirements"},{"label":"Visitor location","value":"Best fit: majority of traffic from the Americas, Europe, or Australia/New Zealand","note":"Publift says it works best with this mix; it does not state a strict geographic cutoff.","sourceUrl":"https://www.publift.com/how-it-works"},{"label":"Content","value":"Useful, original, appropriate, and brand-safe content","sourceUrl":"https://www.publift.com/blog/publift-requirements"},{"label":"Approval time","value":"Ad tags provided within five days","note":"The guide does not separate review time from the ad-tag delivery window.","sourceUrl":"https://www.publift.com/blog/the-best-cpm-ad-network-for-publishers"},{"label":"Ad revenue","value":"More than $2,000 a month","note":"Primary qualifying metric, in USD.","sourceUrl":"https://www.publift.com/blog/publift-requirements"},{"label":"Application","value":"The enquiry form asks for monthly revenue, monthly pageviews, and majority traffic location; these are intake fields, not approval guarantees.","sourceUrl":"https://www.publift.com/lets-talk"}],"revenueShare":"80/20 model according to Publift’s 2026 comparison; confirm in the order","paymentTerms":"Google revenue: Net 30; other ad-network revenue: Net 90","paymentThreshold":"$200 USD","paymentMethods":["Direct bank transfer"],"sources":[{"label":"Publift requirements","url":"https://www.publift.com/blog/publift-requirements"},{"label":"How it works and publisher fit","url":"https://www.publift.com/how-it-works"},{"label":"2026 Mediavine alternatives comparison and revenue split","url":"https://www.publift.com/blog/best-mediavine-alternatives"},{"label":"2026 CPM network payment and tag timing comparison","url":"https://www.publift.com/blog/the-best-cpm-ad-network-for-publishers"},{"label":"2026 payment comparison","url":"https://www.publift.com/blog/ezoic-vs-adsense-vs-publift"},{"label":"Publisher enquiry form","url":"https://www.publift.com/lets-talk"}],"minTraffic":null,"joinSummary":"More than $2,000 monthly ad revenue; pageviews are secondary"}, + "publir": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Programmatic share","value":"85%","note":"publisher share; Publir retains 15%, before applicable service costs","sourceUrl":"https://publir.com/service_agreement"},{"label":"Custom ad share","value":"50/50","note":"publisher and Publir; Net 60","sourceUrl":"https://publir.com/service_agreement"},{"label":"Pro fee","value":"15%","note":"separate from custom ad sales","sourceUrl":"https://publir.com/app/pricing"}],"joining":[{"label":"Traffic","value":"Pricing lists no traffic limit, but general admission criteria are not fully disclosed","sourceUrl":"https://publir.com/app/pricing","note":"Not a guarantee of acceptance at any traffic level."},{"label":"Must connect","value":"Install Publir's software and ad tags","sourceUrl":"https://publir.com/service_agreement"},{"label":"Exclusivity","value":"Non-exclusive service agreement","sourceUrl":"https://publir.com/service_agreement"},{"label":"Notice","value":"Either party may terminate with 30 days’ notice","sourceUrl":"https://publir.com/service_agreement"}],"revenueShare":"Programmatic and subscriptions: 85% to publisher before service costs; custom ads: 50/50; crowdfunding: Publir retains 15%","paymentTerms":"Programmatic and custom ads: at least monthly on Net 60; subscriptions: paid at least monthly","paymentThreshold":null,"paymentMethods":[],"sources":[{"label":"Pricing","url":"https://publir.com/app/pricing"},{"label":"Service agreement","url":"https://publir.com/service_agreement"}],"minTraffic":null}, + "publisher-collective": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Revenue signal","value":"About €300","note":"EUR daily review signal; not a hard joining cutoff","sourceUrl":"https://www.publisher-collective.com/faq"},{"label":"Payment minimum","value":"€500","sourceUrl":"https://www.publisher-collective.com/partners-terms-conditions"}],"joining":[{"label":"Traffic","value":"Core niches are reviewed individually; other niches need 3,000,000 monthly pageviews","note":"Tech, gaming, education, sports and health are core. Hobby coverage needs confirmation. EUR 300 daily revenue is a flexible review signal.","sourceUrl":"https://www.publisher-collective.com/faq"},{"label":"Visitor location","value":"Works with publishers globally","sourceUrl":"https://www.publisher-collective.com/faq"},{"label":"Content","value":"Unique, high-quality content and reputable traffic","note":"No bots or fraudulent traffic; partner terms also prohibit specified content","sourceUrl":"https://www.publisher-collective.com/faq"},{"label":"Must connect","value":"Add Publisher Collective JavaScript tags to the site","sourceUrl":"https://www.publisher-collective.com/faq"},{"label":"Approval time","value":"Application decision time not public; setup takes 10–14 days, full ramp target up to 30 days","note":"The FAQ gives 10 to 14 days for onboarding setup, not application approval","sourceUrl":"https://www.publisher-collective.com/faq"},{"label":"Niches","value":"Technology, video gaming, hobbies and casual games, knowledge and education, sports, health and wellbeing","sourceUrl":"https://www.publisher-collective.com/faq"},{"label":"Ad revenue","value":"About €300/day is a flexible evaluation signal; lower sites may be considered for growth or quality","sourceUrl":"https://www.publisher-collective.com/faq"},{"label":"Application","value":"Site owners can submit a publisher partner enquiry; review is sales-led.","sourceUrl":"https://www.publisher-collective.com/publisher-contact"}],"revenueShare":"Set individually in the Advertising Representation Agreement","paymentTerms":"Paid after the advertiser pays; the partner terms set no fixed interval","paymentThreshold":"€500","paymentMethods":["Bank transfer; GBP, EUR, or USD"],"sources":[{"label":"Publisher FAQ and current eligibility","url":"https://www.publisher-collective.com/faq"},{"label":"Partner terms","url":"https://www.publisher-collective.com/partners-terms-conditions"},{"label":"Publisher contact form","url":"https://www.publisher-collective.com/publisher-contact"}],"joinSummary":"Core genres are reviewed individually; other niches need 3 million pageviews a month","minTraffic":null}, + "pubnation": {"checkedAt":"2026-10-22","keyNumbers":[],"joining":[{"label":"Traffic","value":"No current standalone PubNation offer; migration to Mediavine is complete","sourceUrl":"https://help.mediavine.com/"},{"label":"Application","value":"Discontinued; use a current Mediavine route if eligible","sourceUrl":"https://help.mediavine.com/"}],"revenueShare":null,"paymentTerms":null,"paymentThreshold":null,"paymentMethods":[],"sources":[{"label":"Official publisher homepage","url":"https://www.pubnation.com/"},{"label":"Mediavine migration status","url":"https://help.mediavine.com/"}],"minTraffic":null,"joinSummary":"No standalone offer; migrated to Mediavine"}, + "pubpower": {"checkedAt":"2026-10-23","keyNumbers":[{"label":"Dated traffic figure","value":"100,000","note":"approximate and dated; not a confirmed joining cutoff","sourceUrl":"https://help.pubpower.io/article/website-requirements"},{"label":"Pay day","value":"Net 0 or Net 30","note":"Net 0 above $3,000 a month in revenue","sourceUrl":"https://help.pubpower.io/article/payment-methods-terms"},{"label":"Payoneer minimum","value":"$50","sourceUrl":"https://help.pubpower.io/article/payment-methods-terms"}],"joining":[{"label":"Traffic","value":"Around 100,000 monthly visitors in an old help page; current threshold needs reconfirmation","note":"Page last updated about three years ago; not a confirmed current strict floor.","sourceUrl":"https://help.pubpower.io/article/website-requirements"},{"label":"Content","value":"Follow PubPower’s content policy; no pop-ups or redirects","note":"Policy bars or restricts sexual, explicit, violent, illegal, gambling, and infringing content.","sourceUrl":"https://help.pubpower.io/article/website-requirements"},{"label":"Must connect","value":"Add PubPower ads.txt lines and install its ad tag","sourceUrl":"https://help.pubpower.io/article/quick-start-to-your-monetization"},{"label":"Approval time","value":"Usually 24–48 hours to 2–4 days","note":"Quick-start says 24–48 hours; FAQ says 2–4 days and warns weekends can take longer.","sourceUrl":"https://help.pubpower.io/article/quick-start-to-your-monetization"},{"label":"Application","value":"Create a PubPower publisher account, add the domain, then wait for the publisher QA review.","sourceUrl":"https://help.pubpower.io/article/quick-start-to-your-monetization"}],"revenueShare":"Essential publisher revenue share is tailored; Advanced custom bidders have no revenue share","paymentTerms":"Net 0 above $3,000 monthly revenue; otherwise Net 30","paymentThreshold":"Bank: $1,000; PayPal: $100; Payoneer: $50; crypto: BCH $100, BTC $1,000, USDT-ERC20 $1,000","paymentMethods":["Bank transfer","PayPal","Payoneer","Cryptocurrency (BCH, BTC, USDT-ERC20)"],"sources":[{"label":"PubPower publisher packages and revenue-sharing model","url":"https://pubpower.io/"},{"label":"Website requirements","url":"https://help.pubpower.io/article/website-requirements"},{"label":"Content policies","url":"https://help.pubpower.io/article/content-policies"},{"label":"Quick-start and domain review","url":"https://help.pubpower.io/article/quick-start-to-your-monetization"},{"label":"Publisher FAQ and review timing","url":"https://help.pubpower.io/article/getting-started-faqs"},{"label":"Payment methods and terms","url":"https://help.pubpower.io/article/payment-methods-terms"},{"label":"Publisher account registration","url":"https://apps.pubpower.io/register"}],"minTraffic":null}, + "raptive": {"checkedAt":"2026-10-23","keyNumbers":[{"label":"Traffic to join","value":"25,000","note":"monthly pageviews","sourceUrl":"https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive"},{"label":"Your share","value":"75%","sourceUrl":"https://help.raptive.com/hc/en-us/articles/360035078152-Getting-Started-with-Raptive"},{"label":"Pay day","value":"Net 45","sourceUrl":"https://help.raptive.com/hc/en-us/articles/202052255-When-do-I-get-paid"}],"joining":[{"label":"Traffic","value":"At least 25,000 monthly pageviews; 50% named-country share below 100K PV and 40% at/above 100K","note":"Monthly","sourceUrl":"https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive"},{"label":"Visitor location","value":"50% from five countries at 25k–99,999 pageviews; 40% at 100k+","note":"US, UK, Canada, New Zealand, or Australia","sourceUrl":"https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive"},{"label":"Content","value":"High-quality, original, human-led content","note":"Long-form content on most pages at 25k–99,999 pageviews","sourceUrl":"https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive"},{"label":"Must connect","value":"Google Analytics access","note":"Read-only authorization","sourceUrl":"https://help.raptive.com/hc/en-us/articles/6681661647515-Applying-to-Raptive-with-Google-Analytics"},{"label":"Domain age","value":"At least six months","sourceUrl":"https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive"},{"label":"Application","value":"Apply in the Raptive dashboard after confirming traffic, country share, domain age, and Google Analytics criteria.","sourceUrl":"https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive"}],"revenueShare":"75%","paymentTerms":"Net 45; paid on the 15th","paymentThreshold":"$25 for most methods; $100 for wire transfer","paymentMethods":["US direct deposit","eCheck or local bank transfer","PayPal","Paper check","Wire transfer"],"sources":[{"label":"Creator eligibility","url":"https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive"},{"label":"Applying with Google Analytics","url":"https://help.raptive.com/hc/en-us/articles/6681661647515-Applying-to-Raptive-with-Google-Analytics"},{"label":"Getting started and share","url":"https://help.raptive.com/hc/en-us/articles/360035078152-Getting-Started-with-Raptive"},{"label":"Payment timing","url":"https://help.raptive.com/hc/en-us/articles/202052255-When-do-I-get-paid"},{"label":"Payment methods","url":"https://help.raptive.com/hc/en-us/articles/360013465192-Payment-Methods"},{"label":"Payment thresholds","url":"https://help.raptive.com/hc/en-us/articles/360025379831-Why-didn-t-I-get-my-Raptive-payment"},{"label":"Raptive publisher dashboard application route (direct preview is session-gated)","url":"https://dashboard.raptive.com/"}],"minTraffic":{"amount":25000,"unit":"pageviews"}}, + "refinery89": {"checkedAt":"2026-10-23","keyNumbers":[{"label":"Payment minimum","value":"€250 or $250","note":"a month, by region","sourceUrl":"https://refinery89.com/docs/faqs/finance/is-there-a-minimum-threshold-for-getting-paid/"}],"joining":[{"label":"Traffic","value":"No numeric traffic minimum published; contact team for site review","sourceUrl":"https://refinery89.com/docs/faqs/requirements/am-i-eligible/"},{"label":"Visitor location","value":"Worldwide service availability; no qualifying country share published","sourceUrl":"https://refinery89.com/docs/faqs/about-refinery89/where-does-refinery89-operate-and-offer-its-services/"},{"label":"Must connect","value":"Single Tag for websites or SDK for apps","sourceUrl":"https://refinery89.com/docs/faqs/onboarding/how-can-i-start-working-with-refinery89/"},{"label":"Application","value":"Get Started form accepts a site or app and asks for a pageview band and country; no admission cutoff is published.","sourceUrl":"https://refinery89.com/get-started/"}],"revenueShare":null,"paymentTerms":"Ask your Publisher Success Manager; no standard schedule is published","paymentThreshold":"€250 or $250, based on region","paymentMethods":["Bank transfer","eCheck","Wire transfer","PayPal"],"sources":[{"label":"Eligibility","url":"https://refinery89.com/docs/faqs/requirements/am-i-eligible/"},{"label":"Publisher service locations","url":"https://refinery89.com/docs/faqs/about-refinery89/where-does-refinery89-operate-and-offer-its-services/"},{"label":"How to start and connect","url":"https://refinery89.com/docs/faqs/onboarding/how-can-i-start-working-with-refinery89/"},{"label":"Payment threshold","url":"https://refinery89.com/docs/faqs/finance/is-there-a-minimum-threshold-for-getting-paid/"},{"label":"Payment timing","url":"https://refinery89.com/docs/faqs/finance/when-do-publishers-get-paid/"},{"label":"Payment methods","url":"https://refinery89.com/docs/faqs/finance/what-are-the-payment-methods-available/"},{"label":"Publisher and app Get Started form","url":"https://refinery89.com/get-started/"}],"minTraffic":null}, + "revcontent": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Agreement payment floor","value":"$250","note":"payment-method minimums may differ","sourceUrl":"https://help.revcontent.com/knowledge/publisher-terms"}],"joining":[{"label":"Traffic","value":"No minimum pageviews or traffic; publisher account and every domain are reviewed case by case","sourceUrl":"https://help.revcontent.com/knowledge/creating-a-revcontent-publisher-account","note":"Applications are reviewed case by case"},{"label":"Content","value":"No illegal, infringing, pornographic, obscene, illicit-drug, or unlawful-gambling content","sourceUrl":"https://help.revcontent.com/knowledge/publisher-terms"},{"label":"Must connect","value":"After domain approval, Revcontent sends placement choices and widget code","sourceUrl":"https://help.revcontent.com/knowledge/creating-a-revcontent-publisher-account"},{"label":"Approval time","value":"Each application and domain is reviewed by a human team; no timing is stated","sourceUrl":"https://help.revcontent.com/knowledge/creating-a-revcontent-publisher-account"}],"revenueShare":"Set in the applicable account or order terms; no standard public rate","paymentTerms":null,"paymentThreshold":"$250 in the agreement; method minimums are $100 for US ACH, $100 for international PayPal, and $1,000 for international wire","paymentMethods":["ACH (US)","PayPal (international)","Wire transfer (international)"],"sources":[{"label":"Publisher account creation and approval","url":"https://help.revcontent.com/knowledge/creating-a-revcontent-publisher-account"},{"label":"Publisher terms","url":"https://help.revcontent.com/knowledge/publisher-terms"},{"label":"Publisher payment requirements and methods","url":"https://help.revcontent.com/knowledge/publisher-payment-requirements-methods"}],"minTraffic":{"amount":0,"unit":"pageviews"}}, + "setupad": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Self-Serve entry","value":"10M+ monthly visits","note":"Free plan; separate from managed-service admission","sourceUrl":"https://setupad.com/setupad-self-serve/"},{"label":"Business Self-Serve fee","value":"€0.05 per 1,000 ad requests","note":"€50 minimum prepayment","sourceUrl":"https://setupad.com/setupad-self-serve/"},{"label":"Enterprise spend","value":"€1,000 minimum monthly spend","note":"50M+ visits; separate self-serve offer","sourceUrl":"https://setupad.com/setupad-self-serve/"}],"joining":[{"label":"Traffic","value":"Self-Serve plans start at 10M monthly visits; managed service has no verified current public cutoff","note":"Company articles conflict between 100,000 monthly visitors and sessions. Self-Serve is separate.","sourceUrl":"https://setupad.com/setupad-self-serve/"},{"label":"Visitor location","value":"Main traffic from the US, UK, Canada, or Australia","sourceUrl":"https://setupad.com/blog/best-ad-networks-for-publishers/"},{"label":"Content","value":"Follow Setupad’s quality policy; low-quality sites are not accepted","sourceUrl":"https://setupad.com/blog/best-ad-networks-for-publishers/"},{"label":"Must connect","value":"Add ads.txt and use Setupad demand sources, including Google","sourceUrl":"https://setupad.com/blog/best-ad-networks-for-publishers/"},{"label":"Self-Serve","value":"Requires own GAM, direct SSPs, a high-quality site, and internal approval","sourceUrl":"https://setupad.com/setupad-self-serve/"},{"label":"Application","value":"The live form is for Self-Serve and requests a plan plus Google Analytics domain verification; it does not define managed-service eligibility.","sourceUrl":"https://signup.setupad.com/?lang=en&type=7"}],"revenueShare":"Optional Setupad reseller demand takes 20%; Self-Serve direct demand uses a €0.05 CPM fee","paymentTerms":"Net 60 for published managed terms and optional reseller demand; direct SSP partners pay under their own agreements","paymentThreshold":"$100 in published managed guidance; reseller-demand threshold not stated","paymentMethods":["Bank transfer","PayPal","Payoneer","Wise","Revolut","Paysera"],"sources":[{"label":"Setupad publisher requirements and payment guidance","url":"https://setupad.com/blog/best-ad-networks-for-publishers/"},{"label":"Setupad Self-Serve plans, requirements and billing","url":"https://setupad.com/setupad-self-serve/"},{"label":"Setupad current platform overview","url":"https://setupad.com/"},{"label":"Setupad SSP guide","url":"https://setupad.com/blog/top-ssps-for-publishers/"},{"label":"Setupad Self-Serve application","url":"https://signup.setupad.com/?lang=en&type=7"}],"minTraffic":null,"joinSummary":"Self-Serve: 10M+ monthly visits; managed service has no confirmed current public floor"}, + "she-media": {"checkedAt":"2026-10-23","keyNumbers":[{"label":"Traffic to join","value":"50,000+","note":"monthly pageviews; smaller sites may be considered case by case","sourceUrl":"https://www.shemedia.com/partner-network/faqs"},{"label":"Your share","value":"75%","note":"gross open-marketplace programmatic revenue; guide updated March 2023","sourceUrl":"https://www.shemedia.com/member-spotlight/member-guide-for-partners"},{"label":"Pay day","value":"Net 35","sourceUrl":"https://www.shemedia.com/partner-network/faqs"}],"joining":[{"label":"Traffic","value":"At least 50,000 pageviews/month for standard approval; smaller sites may be considered case by case","note":"Smaller sites can receive individual review; no lower numeric requirement is published","sourceUrl":"https://www.shemedia.com/partner-network/faqs"},{"label":"Visitor location","value":"At least 30% US traffic","sourceUrl":"https://www.shemedia.com/partner-network/faqs"},{"label":"Content","value":"Original, high-quality, brand-safe, human-led content","note":"AI-generated images need a clear disclaimer","sourceUrl":"https://www.shemedia.com/partner-network/faqs"},{"label":"Google standing","value":"Good track record with Google ad products and platforms","sourceUrl":"https://www.shemedia.com/partner-network/faqs"},{"label":"Must connect","value":"Google MCM and ads.txt","note":"MCM and ads.txt are part of the onboarding requirements","sourceUrl":"https://support.shemedia.com/hc/en-us/articles/19361668032027-Onboarding-Guide-for-Wordpress-Sites"},{"label":"Approval time","value":"3–4 weeks for a response","note":"Response timing, not a final decision guarantee","sourceUrl":"https://www.shemedia.com/partner-network/faqs"},{"label":"Analytics","value":"Google Analytics access","sourceUrl":"https://apply.shemedia.com/"},{"label":"Site age","value":"At least 90 days","sourceUrl":"https://www.shemedia.com/partner-network/faqs"},{"label":"Ad inventory","value":"Exclusive mobile and desktop banner ads","note":"Affiliate links and banners are exceptions","sourceUrl":"https://www.shemedia.com/partner-network/faqs"},{"label":"Application","value":"Form asks average monthly GA pageviews, current ad networks, and publishing platform; it says Wix-built sites are ineligible and asks for GA access to verify traffic.","sourceUrl":"https://apply.shemedia.com/"}],"revenueShare":"75% of gross open-marketplace programmatic revenue; up to 75% of direct and private marketplace revenue (Member Guide updated 2023)","paymentTerms":"Net 35 after the month closes","paymentThreshold":"$20 (Member Guide updated 2023)","paymentMethods":["US direct deposit/ACH","US check if ACH is unavailable","PayPal for international publishers","Wise/ACH or wire for international publishers if approved"],"sources":[{"label":"Partner FAQ","url":"https://www.shemedia.com/partner-network/faqs"},{"label":"Publisher application","url":"https://apply.shemedia.com/"},{"label":"WordPress onboarding guide","url":"https://support.shemedia.com/hc/en-us/articles/19361668032027-Onboarding-Guide-for-Wordpress-Sites"},{"label":"Blogger onboarding guide","url":"https://support.shemedia.com/hc/en-us/articles/30950543170971-Onboarding-Guide-for-Blogger-Sites"},{"label":"Member Guide, updated March 2023","url":"https://www.shemedia.com/member-spotlight/member-guide-for-partners"},{"label":"International payment options, updated April 2025","url":"https://support.shemedia.com/hc/en-us/articles/35987097977627-Payment-Options-for-Publishers-Outside-the-US"}],"joinSummary":"50,000 pageviews a month; smaller sites need individual review","minTraffic":{"amount":50000,"unit":"pageviews"}}, + "snack-media": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Referral program traffic","value":"1 million","note":"impressions; not a general minimum, only for referral eligibility","sourceUrl":"https://www.snack-media.com/referral/"},{"label":"Notice to leave","value":"30 days","sourceUrl":"https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf"}],"joining":[{"label":"Traffic","value":"No universal traffic floor in 2025 agreement; 1M impressions applies only to referral eligibility","note":"This is referral-program eligibility; the publisher agreement does not state a universal traffic floor","sourceUrl":"https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf"},{"label":"Content","value":"No hateful, pornographic, illegal, or infringing content","note":"The referral program also excludes sensitive and gambling sites","sourceUrl":"https://www.snack-media.com/brand-safety-policy/"},{"label":"Google standing","value":"Must comply with Google policies for the referral program","sourceUrl":"https://www.snack-media.com/referral/"},{"label":"Must connect","value":"Share live traffic stats and install network tags","note":"Tags must be live within 14 days of the agreement date","sourceUrl":"https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf"},{"label":"Exclusivity","value":"Standard agreement gives Snack exclusive rights for its defined services and specified ad/content sales scope; confirm cover sheet","sourceUrl":"https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf"}],"revenueShare":null,"paymentTerms":"Within 30 days after the month when Snack Media receives the advertiser funds","paymentThreshold":null,"paymentMethods":[],"sources":[{"label":"Publisher referral eligibility","url":"https://www.snack-media.com/referral/"},{"label":"Brand safety policy","url":"https://www.snack-media.com/brand-safety-policy/"},{"label":"2025 publisher agreement terms","url":"https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf"},{"label":"Terms page","url":"https://www.snack-media.com/Ad_Network_Terms_and_Conditions_for_Publishers/"},{"label":"Snack publisher services","url":"https://www.snack-media.com/publishers/"}],"minTraffic":null}, + "sovrn": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Visits to join","value":"More than 100,000","note":"visits a month, strictly more than 100,000","sourceUrl":"https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property"},{"label":"Pay day","value":"Net 45","note":"for most direct publishers; terms may vary","sourceUrl":"https://authcore.atlassian.net/wiki/spaces/KB/pages/2693627510846"},{"label":"Payment minimum","value":"$25","note":"$50 for wire","sourceUrl":"https://knowledge.sovrn.com/kb/what-is-the-minimum-payment-threshold-for-sovrn"}],"joining":[{"label":"Traffic","value":"Strictly more than 100,000 visits/month for Ad Exchange; visits are not sessions","sourceUrl":"https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property","note":"Visits are not sessions."},{"label":"Content","value":"Current content published within 4 months, privacy and brand-safety policies, not child-directed or exclusively under 16","sourceUrl":"https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property"},{"label":"Must connect","value":"Provide an operational business domain and current ads.txt ownership details; intermediaries also need sellers.json","sourceUrl":"https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property"},{"label":"Approval time","value":"Depends on external checks and possible manual review; no fixed estimate. File updates often show within about two business days.","sourceUrl":"https://knowledge.sovrn.com/kb/what-is-sovrn-s-approval-process-for-the-ad-exchange"},{"label":"Application","value":"Create a platform account first, then start Ad Exchange onboarding; Sovrn Commerce is a separate product.","sourceUrl":"https://platform.sovrn.com/account/signup"}],"revenueShare":null,"paymentTerms":"Net 45 for most Ad Exchange publishers; individual publisher terms may vary","paymentThreshold":"$25 standard; $50 for wire transfer","paymentMethods":["PayPal","ACH (US)","Wire transfer","eCheck/local transfer","Paper check (US)"],"sources":[{"label":"Property approval requirements","url":"https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property"},{"label":"Approval process and timing","url":"https://knowledge.sovrn.com/kb/what-is-sovrn-s-approval-process-for-the-ad-exchange"},{"label":"Current payment methods","url":"https://knowledge.sovrn.com/kb/how-do-i-get-paid-for-the-ad-exchange"},{"label":"Payment thresholds","url":"https://knowledge.sovrn.com/kb/what-is-the-minimum-payment-threshold-for-sovrn"},{"label":"Payment timing guide","url":"https://authcore.atlassian.net/wiki/spaces/KB/pages/2693627510846"},{"label":"Ad Exchange account sign-up","url":"https://platform.sovrn.com/account/signup"}],"minTraffic":{"amount":100000,"unit":"visits","label":"More than 100,000 visits a month"}}, + "sparteo": {"checkedAt":"2026-10-22","keyNumbers":[],"joining":[{"label":"Traffic","value":"Sales-led; no public numeric entry minimum found","sourceUrl":"https://corporate.sparteo.com/"},{"label":"Application","value":"Contact the team for a sales-led publisher discussion; no self-serve application gate is published.","sourceUrl":"https://corporate.sparteo.com/contact"}],"revenueShare":null,"paymentTerms":null,"paymentThreshold":null,"paymentMethods":[],"sources":[{"label":"Company and publisher services","url":"https://corporate.sparteo.com/"},{"label":"Publisher technology privacy notice","url":"https://corporate.sparteo.com/services-privacy-notice"},{"label":"Publisher platform case study","url":"https://corporate.sparteo.com/post/w3schools-rpm-uplift-unified-monetisation-stack"},{"label":"Company expansion update","url":"https://corporate.sparteo.com/post/sparteo-strengthens-supply-leadership-to-accelerate-global-expansion"},{"label":"Sparteo company LinkedIn","url":"https://www.linkedin.com/company/sparteo"},{"label":"Publisher contact form","url":"https://corporate.sparteo.com/contact"}],"minTraffic":null}, + "taboola": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Pay day","value":"Within 45 days","note":"after the month ends","sourceUrl":"https://www.taboola.com/policies/publisher-revshare-terms-and-conditions-1-3-US"}],"joining":[{"label":"Traffic","value":"No numeric minimum stated in current account guide","sourceUrl":"https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account"},{"label":"Content","value":"Own or properly license content and follow the Publisher Policy","sourceUrl":"https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account"},{"label":"Must connect","value":"Install Taboola widget code","sourceUrl":"https://developers.taboola.com/web-integrations/docs/welcome"},{"label":"Approval time","value":"Team responds within 48 hours","note":"This is response timing, not final approval","sourceUrl":"https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account"},{"label":"Applicant age","value":"At least 18 years old","sourceUrl":"https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account"},{"label":"Exclusivity","value":"Exclusive only against other third-party recommendation services under current guide","sourceUrl":"https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account"}],"revenueShare":"Set in the applicable publisher Order; no standard public percentage","paymentTerms":"Within 45 days after month-end; paid in US dollars","paymentThreshold":null,"paymentMethods":["Payoneer (most publishers); exceptions vary by location"],"sources":[{"label":"New publisher account guide","url":"https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account"},{"label":"Publisher policy","url":"https://pubhelp.taboola.com/hc/en-us/articles/360033751274-Taboola-Publisher-Policy"},{"label":"Web integration guide","url":"https://developers.taboola.com/web-integrations/docs/welcome"},{"label":"Publisher revenue-share terms","url":"https://www.taboola.com/policies/publisher-revshare-terms-and-conditions-1-3-US"},{"label":"Account setup and payment methods","url":"https://pubhelp.taboola.com/hc/en-us/articles/360003157054-Account-Set-Up"}],"minTraffic":null}, + "teads": {"checkedAt":"2026-10-22","keyNumbers":[],"joining":[{"label":"Traffic","value":"Sales-led media-owner partnership; no public numeric threshold","sourceUrl":"https://www.teads.com/media-owners"}],"revenueShare":"Terms vary by contract; revenue-share rates may vary with pageview volume or total revenue","paymentTerms":"Negotiated in the media-partner contract; no standard payment interval is published","paymentThreshold":null,"paymentMethods":[],"sources":[{"label":"Media owner partnership","url":"https://www.teads.com/media-owners"},{"label":"2025 annual filing describing publisher agreements and negotiated payment timing","url":"https://www.sec.gov/Archives/edgar/data/1454938/000145493826000015/tead-20251231.htm"}],"minTraffic":null}, + "the-moneytizer": {"checkedAt":"2026-10-22","keyNumbers":[{"label":"Organic audience to join","value":"300,000 unique visitors","note":"Organic traffic in prior 30 days; US/UK/CA","sourceUrl":"https://us.themoneytizer.com/faq/validation-criteria"},{"label":"Publisher share","value":"At least 70%","note":"pre-tax advertiser billings under terms","sourceUrl":"https://www.themoneytizer.com/cgu"},{"label":"Payout threshold","value":"€50 or $50","note":"market-specific","sourceUrl":"https://us.themoneytizer.com/category/payments-invoices"}],"joining":[{"label":"Traffic","value":"At least 300,000 unique visitors from organic traffic in the 30 days before registration; qualifying countries US/UK/CA","sourceUrl":"https://us.themoneytizer.com/faq/validation-criteria"},{"label":"Visitor location","value":"Qualifying organic unique visitors must be from the US, UK, or Canada","sourceUrl":"https://us.themoneytizer.com/faq/validation-criteria"},{"label":"Content","value":"Own domain/server access, sufficient current content; listed restricted categories excluded","sourceUrl":"https://us.themoneytizer.com/faq/validation-criteria"},{"label":"Must connect","value":"Install ads.txt and ad tags; use a consent banner for EU traffic","sourceUrl":"https://us.themoneytizer.com/publisherguide"},{"label":"Approval time","value":"A quality review follows website registration; no timing stated","sourceUrl":"https://us.themoneytizer.com/publisherguide"},{"label":"Application","value":"Register an account, add the owned website in the portal, then wait for a quality review.","sourceUrl":"https://us.themoneytizer.com/"}],"revenueShare":"At least 70% of the pre-tax amount billed to advertisers under published Terms","paymentTerms":"An invoice is generated automatically at the threshold and is payable 60 days after its issue date","paymentThreshold":"€50 under the published Terms; $50 in the US publisher FAQ","paymentMethods":["Bank transfer","PayPal"],"sources":[{"label":"Publisher terms and conditions","url":"https://www.themoneytizer.com/cgu"},{"label":"Publisher guide","url":"https://us.themoneytizer.com/publisherguide"},{"label":"US payments FAQ","url":"https://us.themoneytizer.com/category/payments-invoices"},{"label":"US validation criteria","url":"https://us.themoneytizer.com/faq/validation-criteria"},{"label":"US publisher sign-up page","url":"https://us.themoneytizer.com/"}],"minTraffic":null,"joinSummary":"300,000 unique organic visitors in prior 30 days from US/UK/CA"}, + "venatus": {"checkedAt":"2026-10-22","keyNumbers":[],"joining":[{"label":"Traffic","value":"Sales-led publisher review; no numeric threshold published","sourceUrl":"https://www.venatus.com/contact/for-publishers"},{"label":"Content","value":"Must pass a human audit; prohibited content includes hate speech, adult, illegal filesharing/downloads/streaming or hacking, and promotion of drugs/tobacco/firearms","sourceUrl":"https://www.venatus.com/brand-safety"}],"revenueShare":null,"paymentTerms":null,"paymentThreshold":null,"paymentMethods":[],"sources":[{"label":"Publisher brand-safety standards","url":"https://www.venatus.com/brand-safety"},{"label":"Publisher contact page","url":"https://www.venatus.com/contact/for-publishers"},{"label":"Venatus company site","url":"https://www.venatus.com/"},{"label":"Venatus company LinkedIn","url":"https://www.linkedin.com/company/we-are-venatus"}],"minTraffic":null}, }; diff --git a/app/(site)/(directories)/ad-networks/page.tsx b/app/(site)/(directories)/ad-networks/page.tsx index c1ab7303..c91074da 100644 --- a/app/(site)/(directories)/ad-networks/page.tsx +++ b/app/(site)/(directories)/ad-networks/page.tsx @@ -1,3 +1,4 @@ +import Link from "next/link"; import { Network } from "lucide-react"; import { getBreadcrumbs } from "@/lib/breadcrumbs"; import { getRequiredDirectoryPage } from "@/lib/directory-pages"; @@ -68,12 +69,13 @@ export default async function AdNetworksPage() {

} iconKey={directoryPage.card_icon_key} />

- +

A directory of

{data.networks_tracked}
ad networks for publishers, from Ezoic and Mediavine to Google AdSense. See what each one takes to join and how many sites run it. {/* data-gate: the sync fills the listed and confirmed counts. */} {data.listed ? <> We list
{data.listed}
sites, and
{data.confirmed}
{data.confirmed === 1 ? "is" : "are"} confirmed live from their own ads.txt files or ad code. : null}

+

Use the free ad network requirements checker to see which published joining rules your numbers meet.

You can decline Google Analytics when the consent bar appears. To change your choice - later, open analytics settings in the site footer. Turning Google + later, open consent in the site footer. Turning Google Analytics off saves your choice, tells the tag that analytics storage is denied, and deletes the Google Analytics first-party cookies that stack127 can access. Umami doesn't use cookies and stays on. diff --git a/app/(site)/(tools)/ad-network-requirements-checker/ad-network-requirements-checker-from-url.tsx b/app/(site)/(tools)/ad-network-requirements-checker/ad-network-requirements-checker-from-url.tsx new file mode 100644 index 00000000..471f0cd8 --- /dev/null +++ b/app/(site)/(tools)/ad-network-requirements-checker/ad-network-requirements-checker-from-url.tsx @@ -0,0 +1,12 @@ +"use client"; + +import { useInitialQuery } from "@/app/ui/tools/use-initial-query"; +import { parseRecommendationQuery } from "@/lib/ad-network-requirements/engine"; +import type { RequirementsPageData } from "@/lib/ad-network-requirements/types"; +import { AdNetworkRequirementsChecker } from "./ad-network-requirements-checker-tool"; + +export function AdNetworkRequirementsCheckerFromUrl({ data }: { data: RequirementsPageData }) { + const query = useInitialQuery(); + const parsed = parseRecommendationQuery(new URLSearchParams(query.key === "default" ? "" : query.key)); + return ; +} diff --git a/app/(site)/(tools)/ad-network-requirements-checker/ad-network-requirements-checker-tool.tsx b/app/(site)/(tools)/ad-network-requirements-checker/ad-network-requirements-checker-tool.tsx new file mode 100644 index 00000000..9fe5c98a --- /dev/null +++ b/app/(site)/(tools)/ad-network-requirements-checker/ad-network-requirements-checker-tool.tsx @@ -0,0 +1,384 @@ +"use client"; + +import { RotateCcw } from "lucide-react"; +import { useEffect, useRef, useState, type FormEvent, type ReactNode, type RefObject } from "react"; +import { adNetworkNiches } from "@/lib/ad-network-niches"; +import { recommendAdNetworks, recommendationShareParams, validateRecommendationInput } from "@/lib/ad-network-requirements/engine"; +import type { InputErrorCode, InputKey, RecommendationInput, RecommendationResult, RequirementsPageData } from "@/lib/ad-network-requirements/types"; +import { UiButton, UiChoiceGroup, UiComboBox, UiDisclosure, UiQuantityInput, UiSelect, UiShareAction, UiTextField, uiSetSummary } from "@/app/ui/controls"; +import { UiActionRow, UiResultLead, UiStatus, UiStatusWord } from "@/app/ui/display"; +import { ToolFieldRow, ToolResult, ToolWorkbench } from "@/app/ui/tools/tool-workbench"; +import styles from "./ad-network-requirements-checker.module.css"; +import { CompactRow, currentLabel, GrowthRow, RecommendationCard, type NameOf } from "./recommendation-card"; + +type Raw = Partial>; +type FieldErrors = Partial>; +type Shown = { input: RecommendationInput; result: RecommendationResult; shareRaw: Raw; run: number }; + +const EXAMPLE: Raw = { + niche: "food", + current: "google-adsense", + pageviews: "40000", + visits: "22000", + visitsUnit: "sessions", + tier1Share: "65", + adRevenueMonth: "350", + siteAge: "gt12m", +}; + +const FIELD_ORDER: InputKey[] = ["niche", "tier1Share", "pageviews", "visits", "visitsUnit", "siteAge", "current", "adRevenueMonth", "shareUS", "shareGB", "shareCA", "shareAU", "shareNZ"]; +const SPLIT: { key: InputKey; label: string; hint?: string }[] = [ + { key: "shareUS", label: "US", hint: "Part of your Tier 1 share, not added to it." }, + { key: "shareGB", label: "UK" }, + { key: "shareCA", label: "Canada" }, + { key: "shareAU", label: "Australia" }, + { key: "shareNZ", label: "New Zealand" }, +]; +const SPLIT_KEYS = new Set(SPLIT.map((field) => field.key)); +const AGE_OPTIONS = [ + { id: "lt3m", label: "Under 3 months" }, + { id: "3to6m", label: "3 to 6 months" }, + { id: "6to12m", label: "6 to 12 months" }, + { id: "gt12m", label: "Over a year" }, + { id: "unknown", label: "Not sure" }, +]; +const UNITS = [ + { id: "sessions", label: "Sessions" }, + { id: "visits", label: "Visits" }, + { id: "users", label: "Users" }, +]; +const LEGACY = new Set(["pubnation", "pubgalaxy"]); +const SUGGEST: Partial> = { + adRevenueMonth: { text: "Add your monthly ad revenue to see where Mediavine, Publift, and PubGuru fit.", button: "Add revenue" }, + tier1Share: { text: "Add your Tier 1 share to see where Raptive, Monumetric, and Journey fit.", button: "Add Tier 1 share" }, + siteAge: { text: "Add your site age to see where Raptive, SHE Media, and Journey fit.", button: "Add site age" }, +}; + +// The tool's own share-link parameters. Reset removes only these and keeps anything else, such as utm tags. +const SHARE_PARAMS = ["niche", "pv", "visits", "unit", "age", "t1", "us", "gb", "ca", "au", "nz", "current", "rev"]; + +function removeShareParams() { + const url = new URL(window.location.href); + if (!SHARE_PARAMS.some((param) => url.searchParams.has(param))) return; + for (const param of SHARE_PARAMS) url.searchParams.delete(param); + window.history.replaceState(null, "", `${url.pathname}${url.search}${url.hash}`); +} + +function errorText(code: InputErrorCode, key: InputKey): string { + switch (code) { + case "required": return key === "pageviews" ? "Enter your pageviews." : "Choose your niche."; + case "not_a_number": return "Enter a number."; + case "negative": return "Enter 0 or more."; + case "not_whole": return "Enter a whole number."; + case "too_many_decimals": return key === "adRevenueMonth" ? "Use at most 2 decimals." : "Use at most 1 decimal."; + case "too_large": return key === "adRevenueMonth" ? "Enter up to 100 million." : "Enter up to 10 billion."; + case "over_100": return "Enter 100 or less."; + case "shares_over_100": return "These shares add up to more than 100%."; + case "shares_over_tier1": return "These shares add up to more than your Tier 1 share."; + case "split_mismatch": return "All five shares should add up to your Tier 1 share."; + case "invalid_choice": return "Choose one of the options."; + } +} + +function firstError(errors: FieldErrors) { + return FIELD_ORDER.find((key) => errors[key]) ?? null; +} + +function run(raw: Raw, peers: RequirementsPageData["peers"]): { ok: true; shown: Shown } | { ok: false; errors: FieldErrors } { + const validated = validateRecommendationInput(raw); + if (!validated.ok) return { ok: false, errors: validated.errors }; + const input = validated.input; + const result = recommendAdNetworks(input, input.niche === "other" ? null : peers[input.niche]); + return { ok: true, shown: { input, result, shareRaw: { ...raw }, run: Date.now() } }; +} + +function leadText(result: RecommendationResult, nameOf: NameOf) { + const lead = result.lead; + switch (lead.kind) { + case "apply": return `Apply to ${nameOf(lead.slug).name} first`; + case "grow": return `Grow toward ${nameOf(lead.slug).name} next`; + case "no_step_up": return `No clear step up from ${currentLabel(lead.current, nameOf)} right now`; + case "none_stand_out": return "No network stands out for these numbers yet"; + } +} + +function places(n: number) { + return n === 1 ? "1 place to try" : `${n} places to try`; +} + +function focusField(form: HTMLFormElement, key: InputKey) { + const target = key === "visitsUnit" ? "visits" : key; + const node = form.querySelector(`[data-focus-key="${target}"]`); + if (!node) return; + if (node.matches("input, button, [role='radio']")) node.focus(); + else node.querySelector("input, button, [role='radio']")?.focus(); +} + +export function AdNetworkRequirementsChecker({ data, initialRaw }: { data: RequirementsPageData; initialRaw?: Raw }) { + const [first] = useState(() => { + const example = validateRecommendationInput(EXAMPLE); + if (!example.ok) throw new Error("The ad network example must validate."); + const exampleShown: Shown = { input: example.input, result: data.defaultResult, shareRaw: { ...EXAMPLE }, run: 0 }; + if (!initialRaw) return { exampleShown, raw: { ...EXAMPLE }, shown: exampleShown, errors: {} as FieldErrors, example: true, stale: false }; + const outcome = run(initialRaw, data.peers); + if (outcome.ok) return { exampleShown, raw: initialRaw, shown: outcome.shown, errors: {} as FieldErrors, example: false, stale: false }; + return { exampleShown, raw: initialRaw, shown: exampleShown, errors: outcome.errors, example: true, stale: true }; + }); + const [raw, setRaw] = useState(first.raw); + const [shown, setShown] = useState(first.shown); + const [errors, setErrors] = useState(first.errors); + const [isExample, setIsExample] = useState(first.example); + const [isStale, setIsStale] = useState(first.stale); + const firstErr = firstError(first.errors); + const [splitOpen, setSplitOpen] = useState(Boolean(firstErr && SPLIT_KEYS.has(firstErr))); + const [focusTarget, setFocusTarget] = useState(firstErr); + const [announcement, setAnnouncement] = useState(""); + const formRef = useRef(null); + const leadRef = useRef(null); + + const networks = new Map(data.networks.map((network) => [network.slug, network])); + const nameOf: NameOf = (slug) => networks.get(slug) ?? { name: slug, logo: null, directoryHref: "/ad-networks" }; + + useEffect(() => { + if (!focusTarget) return; + if (focusTarget === "answer") leadRef.current?.focus(); + else if (formRef.current) focusField(formRef.current, focusTarget); + setFocusTarget(null); + }, [focusTarget]); + + function update(key: InputKey, value: string) { + setRaw((current) => ({ ...current, [key]: value })); + setIsStale(true); + setErrors((current) => { + if (!(key in current) && !(SPLIT_KEYS.has(key) || key === "tier1Share")) return current; + const next = { ...current }; + delete next[key]; + if (SPLIT_KEYS.has(key) || key === "tier1Share") delete next.shareUS; + return next; + }); + } + + function submit(event?: FormEvent) { + event?.preventDefault(); + const outcome = run(raw, data.peers); + if (!outcome.ok) { + setErrors(outcome.errors); + setIsStale(true); + const target = firstError(outcome.errors); + if (target && SPLIT_KEYS.has(target)) setSplitOpen(true); + setFocusTarget(target); + return; + } + setErrors({}); + setShown(outcome.shown); + setIsExample(false); + setIsStale(false); + setAnnouncement(leadText(outcome.shown.result, nameOf)); + setFocusTarget("answer"); + } + + function reset() { + removeShareParams(); + setRaw({ ...EXAMPLE }); + setShown((current) => ({ ...first.exampleShown, run: current.run + 1 })); + setErrors({}); + setIsExample(true); + setIsStale(false); + setSplitOpen(false); + } + + function reveal(key: InputKey) { + if (SPLIT_KEYS.has(key)) setSplitOpen(true); + setFocusTarget(key); + } + + const value = (key: InputKey) => raw[key] ?? ""; + const message = (key: InputKey) => (errors[key] ? errorText(errors[key]!, key) : undefined); + const splitCount = SPLIT.filter((field) => value(field.key).trim()).length; + const currentOptions = [ + { id: "none", label: "None" }, + ...data.networks.filter((network) => !LEGACY.has(network.slug)).map((network) => ({ id: network.slug, label: network.name })).sort((a, b) => a.label.localeCompare(b.label, "en")), + { id: "pubnation", label: "PubNation" }, + { id: "pubgalaxy", label: "PubGalaxy" }, + { id: "snigel", label: "Snigel (now Publisher Collective)" }, + { id: "other", label: "Another network" }, + ]; + + return ( + +

+ + update("niche", next)} + options={[...adNetworkNiches.map((niche) => ({ id: niche.slug, label: niche.name })), { id: "other", label: "Something else" }]} + required + value={value("niche") || null} + /> + update("tier1Share", next)} + suffix="%" + value={value("tier1Share")} + /> + + + update("pageviews", next)} + required + value={value("pageviews")} + /> + update("visits", next)} + onUnitChange={(next) => update("visitsUnit", next)} + unit={value("visitsUnit") || "sessions"} + unitAriaLabel="What your analytics calls it" + units={UNITS} + value={value("visits")} + /> + +
+ update("siteAge", next === "unknown" ? "" : next)} + options={AGE_OPTIONS} + value={value("siteAge") || "unknown"} + /> +
+ +
+ update("current", next ?? "")} + options={currentOptions} + placeholder="Type to search" + value={value("current") || null} + /> +
+ update("adRevenueMonth", next)} + suffix="USD" + value={value("adRevenueMonth")} + /> +
+ +
+ {SPLIT.map((field) => ( + update(field.key, next)} + suffix="%" + value={value(field.key)} + /> + ))} +
+
+ + {isStale ? Inputs changed : null} + Find networks + + + +
+ +
{announcement}
+ +
+ + ); +} + +function ResultView({ isExample, leadRef, nameOf, onReveal, shown }: { + isExample: boolean; + leadRef: RefObject; + nameOf: NameOf; + onReveal: (key: InputKey) => void; + shown: Shown; +}) { + const { result, input } = shown; + const { add, setup, growth } = result.more; + const moreCount = add.length + setup.length + growth.length; + const moreSummary = [ + add.length ? `${add.length} to add` : null, + setup.length ? `${setup.length} for your own setup` : null, + growth.length ? `${growth.length} to grow toward` : null, + ].filter(Boolean).join(", "); + const suggestion = result.suggestInput ? SUGGEST[result.suggestInput] : undefined; + return ( +
+
+ {leadText(result, nameOf)} +

+ {result.main.length ? {places(result.main.length)} : null} + Estimate + {isExample ? Example : null} +

+
+ {result.main.length ? ( +
    + {result.main.map((card, index) => ( + + ))} +
+ ) : null} + {suggestion ? ( +
+

{suggestion.text}

+ onReveal(result.suggestInput!)} type="button" variant="ghost">{suggestion.button} +
+ ) : null} + {moreCount ? ( + +
+ {add.map((card) => )} + {setup.map((card) => )} + {growth.map((target) => )} +
+
+ ) : null} + +
+ ); +} + +function MoreGroup({ children, title }: { children: ReactNode[]; title: string }) { + if (!children.length) return null; + return ( +
+

{title}

+
    {children}
+
+ ); +} diff --git a/app/(site)/(tools)/ad-network-requirements-checker/ad-network-requirements-checker.module.css b/app/(site)/(tools)/ad-network-requirements-checker/ad-network-requirements-checker.module.css new file mode 100644 index 00000000..81d01b07 --- /dev/null +++ b/app/(site)/(tools)/ad-network-requirements-checker/ad-network-requirements-checker.module.css @@ -0,0 +1,280 @@ +.form { + display: grid; + gap: var(--space-6); + min-width: 0; +} + +.ageWrap { + min-width: 0; +} + +.split { + align-items: start; + display: grid; + gap: var(--space-5); + grid-template-columns: repeat(5, minmax(0, 1fr)); + min-width: 0; + padding-top: var(--space-5); +} + +.result { + display: grid; + gap: var(--space-6); + min-width: 0; +} + +.leadBlock { + display: grid; + gap: var(--space-2); +} + +.leadMeta { + align-items: center; + color: var(--color-text-muted); + display: flex; + flex-wrap: wrap; + font-size: var(--text-small); + gap: var(--space-3); + margin: 0; +} + +.cards, +.compactList, +.plainList { + list-style: none; + margin: 0; + padding: 0; +} + +.cards { + border-top: 1px solid var(--color-border); + max-width: 48rem; +} + +.card { + border-bottom: 1px solid var(--color-border); + padding: var(--space-5) 0; +} + +.cardRow, +.compact { + align-items: start; + display: grid; + gap: var(--space-4); + min-width: 0; +} + +.cardRow { + grid-template-columns: 1.25rem auto minmax(0, 1fr) auto; +} + +.compact { + border-top: 1px solid var(--color-border); + grid-template-columns: auto minmax(0, 1fr) auto; + padding: var(--space-4) 0; +} + +.rank { + color: var(--color-text-muted); + font-family: var(--font-mono); + line-height: 2rem; +} + +.cardMain { + display: grid; + gap: var(--space-1); + min-width: 0; +} + +.cardMain p { + margin: 0; +} + +.cardTitle { + align-items: baseline; + display: flex; + flex-wrap: wrap; + gap: var(--space-1) var(--space-3); +} + +.cardName { + font-weight: var(--weight-semibold); +} + +.status { + font-size: var(--text-small); + font-weight: var(--weight-semibold); + white-space: nowrap; +} + +.status[data-status="good_fit"] { + color: var(--color-accent-text); +} + +.status[data-status="worth_a_try"] { + color: var(--color-text); +} + +.status[data-status="growth_target"] { + color: var(--color-text-muted); +} + +.reason { + overflow-wrap: anywhere; +} + +.meta { + color: var(--color-text-muted); + font-size: var(--text-small); + margin: 0; +} + +.cardActions { + align-items: center; + display: flex; + gap: var(--space-2); +} + +.apply { + align-items: center; + display: inline-flex; + font-weight: var(--weight-semibold); + gap: var(--space-2); + min-height: var(--control-height-lg); + padding: 0 var(--space-3); + white-space: nowrap; +} + +.detail { + display: grid; + gap: var(--space-4); + margin-top: var(--space-4); + padding-left: calc(1.25rem + 32px + 2 * var(--space-4)); +} + +.detail[hidden] { + display: none; +} + +.plainList { + display: grid; + gap: var(--space-1); +} + +.plainList a { + overflow-wrap: anywhere; +} + +.suggest { + align-items: center; + display: flex; + flex-wrap: wrap; + gap: var(--space-3); + justify-content: space-between; + max-width: 48rem; +} + +.suggest p { + margin: 0; + min-width: 0; +} + +.more { + display: grid; + gap: var(--space-6); + max-width: 48rem; + padding-top: var(--space-5); +} + +.moreGroup { + display: grid; + gap: var(--space-2); +} + +.moreGroup h3 { + font-family: var(--font-display); + font-size: var(--text-body); + font-weight: var(--weight-semibold); + letter-spacing: var(--tracking-display); + line-height: var(--line-heading); + margin: 0; +} + +.visuallyHidden { + clip: rect(0 0 0 0); + clip-path: inset(50%); + height: 1px; + overflow: hidden; + position: absolute; + white-space: nowrap; + width: 1px; +} + +@media (max-width: 640px) { + .split { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .ageWrap :global([class*="choiceRow"]) { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .ageWrap :global([class*="choiceRow"]) > * { + min-width: 0; + } + + .cardRow { + grid-template-columns: 1rem auto minmax(0, 1fr); + } + + .cardRow .cardActions { + grid-column: 3; + } + + .compact { + grid-template-columns: auto minmax(0, 1fr); + } + + .compact .cardActions { + grid-column: 2; + } + + .apply { + padding-left: 0; + } + + .detail { + padding-left: 0; + } +} + +.facts { + display: grid; + margin: 0; +} + +.facts > div { + border-top: 1px solid var(--color-border); + display: grid; + gap: var(--space-1) var(--space-5); + grid-template-columns: 9rem minmax(0, 1fr); + padding: var(--space-3) 0; +} + +.facts dt { + color: var(--color-text-muted); + font-size: var(--text-small); + line-height: var(--line-body); +} + +.facts dd { + margin: 0; + min-width: 0; +} + +@media (max-width: 640px) { + .facts > div { + grid-template-columns: 1fr; + } +} diff --git a/app/(site)/(tools)/ad-network-requirements-checker/content/article.mdx b/app/(site)/(tools)/ad-network-requirements-checker/content/article.mdx new file mode 100644 index 00000000..7b360ca7 --- /dev/null +++ b/app/(site)/(tools)/ad-network-requirements-checker/content/article.mdx @@ -0,0 +1,34 @@ +## What do ad networks require? + +This is what each network publishes, checked in October 2026. Every network also reviews your content and where your traffic comes from. + +| Network | What it asks for | +| --- | --- | +| [Google AdSense](https://support.google.com/adsense/answer/9724?hl=en) | No traffic minimum. Original content that follows its policies. | +| [Journey by Mediavine](https://www.mediavine.com/application-requirements/) | 1,000 Tier 1 sessions in 30 days, with its Grow plugin running for 30 days. | +| [Monumetric](https://www.monumetric.com/monumetric-program-overview/) | 10,000 pageviews a month for 3 months, half from the US, UK, Canada, and Australia. | +| [Raptive](https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive) | 25,000 pageviews a month, a domain at least 6 months old, and 50% Tier 1 traffic (40% from 100,000 pageviews). | +| [SHE Media](https://www.shemedia.com/partner-network/faqs) | 50,000 pageviews a month, 30% from the US, and 90 days live. | +| [Mediavine](https://help.mediavine.com/programs-and-the-publisher-path-to-growth) | $5,000 in ad revenue in the previous calendar year. | +| [Newor Media](https://newormedia.com/programs) | Elevate has no minimum. Catapult starts at 60,000 US pageviews a month. | +| [Ezoic](https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES) | 250,000 monthly users. Its Incubator takes a few smaller sites each month. | +| [PubFuture](https://pubfuture.com/home) | 100,000 pageviews a month. | +| [Clickio](https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards) | About 100,000 pageviews a month from the US, UK, Canada, Australia, or France, or over $500 a month in ad revenue. | +| [Playwire](https://www.playwire.com/faq) | 500,000 pageviews a month, though sites [usually apply from 100,000](https://www.playwire.com/qualification-criteria). | +| [Freestar](https://freestar.com/publisher-quality-requirements/) | Half your traffic from Tier 1 countries and half from organic sources. | +| [Publift](https://www.publift.com/blog/publift-requirements) | Over $2,000 a month in ad revenue. | +| [MGID](https://help.mgid.com/publishers-general-information) | 90,000 visitors a month and at least 10 current articles. | +| [Taboola](https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account) | No traffic minimum. | + +The rest, with pay terms, are in the [ad networks directory](/ad-networks). To see which networks a site you know uses, try the [ad network checker](/ad-network-checker). + +## Why is a network I know missing? + +- You already use it, or something bigger. +- It's built for another niche, such as gaming or developer sites. +- It wants much bigger sites. The closest ones show under `Grow toward`. +- It no longer takes new sites. + +## How are networks ranked? + +By how close your numbers are to each network's published bar. Your niche, Tier 1 share, and the sites we track in your niche adjust the order. It's a list to try, not a ranking by pay. diff --git a/app/(site)/(tools)/ad-network-requirements-checker/content/intro.mdx b/app/(site)/(tools)/ad-network-requirements-checker/content/intro.mdx new file mode 100644 index 00000000..c7c9256f --- /dev/null +++ b/app/(site)/(tools)/ad-network-requirements-checker/content/intro.mdx @@ -0,0 +1 @@ +Not sure which ad network to apply to? Enter your niche and traffic, and you'll get 3 to 5 networks that fit, best first. It's an estimate, so each network still reviews your site before it says yes. diff --git a/app/(site)/(tools)/ad-network-requirements-checker/content/usage.mdx b/app/(site)/(tools)/ad-network-requirements-checker/content/usage.mdx new file mode 100644 index 00000000..6811d8af --- /dev/null +++ b/app/(site)/(tools)/ad-network-requirements-checker/content/usage.mdx @@ -0,0 +1,12 @@ +## What do I need to enter? + +Only your niche and pageviews are required. Leave anything else you don't know blank. + +- **Pageviews and visits.** From your analytics, for a typical month. Some networks count visits, so add them too if you have them. +- **Tier 1 share.** Your traffic from the US, UK, Canada, Australia, and New Zealand together. +- **Current ad network.** The list skips it and anything smaller. +- **Ad revenue a month.** Ads only, in US dollars. + +## How do I read the result? + +**Good fit** means your numbers meet the network's published bar. **Worth a try** means it reviews sites like yours case by case. Open `Details` for the rule and its source, and `More options` for networks to add alongside or grow toward. diff --git a/app/(site)/(tools)/ad-network-requirements-checker/layout.tsx b/app/(site)/(tools)/ad-network-requirements-checker/layout.tsx new file mode 100644 index 00000000..e585405f --- /dev/null +++ b/app/(site)/(tools)/ad-network-requirements-checker/layout.tsx @@ -0,0 +1,6 @@ +import { registryLayout } from "@/lib/registry-layout"; + +const registry = registryLayout("/ad-network-requirements-checker"); +export const generateMetadata = registry.generateMetadata; +export const revalidate = false; +export default registry.Layout; diff --git a/app/(site)/(tools)/ad-network-requirements-checker/page.tsx b/app/(site)/(tools)/ad-network-requirements-checker/page.tsx new file mode 100644 index 00000000..de3ed38c --- /dev/null +++ b/app/(site)/(tools)/ad-network-requirements-checker/page.tsx @@ -0,0 +1,27 @@ +import { ClipboardList } from "lucide-react"; +import { PageCanvas } from "@/app/ui/site/page-canvas"; +import { ToolPageArticle, ToolPageHeader } from "@/app/ui/site/tool-page-content"; +import { ToolPageShell } from "@/app/ui/tools/tool-page-shell"; +import { loadRequirementsPageData } from "@/lib/ad-network-requirements/page-data"; +import { getRequiredToolPage } from "@/lib/tool-pages"; +import { AdNetworkRequirementsCheckerFromUrl } from "./ad-network-requirements-checker-from-url"; +import Article from "./content/article.mdx"; +import Intro from "./content/intro.mdx"; +import Usage from "./content/usage.mdx"; + +export default async function AdNetworkRequirementsCheckerPage() { + const toolPage = await getRequiredToolPage("ad-network-requirements-checker"); + const data = await loadRequirementsPageData(); + return ( + + + } intro={} toolPage={toolPage} /> + + + +
+ + + + ); +} diff --git a/app/(site)/(tools)/ad-network-requirements-checker/recommendation-card.tsx b/app/(site)/(tools)/ad-network-requirements-checker/recommendation-card.tsx new file mode 100644 index 00000000..c4108456 --- /dev/null +++ b/app/(site)/(tools)/ad-network-requirements-checker/recommendation-card.tsx @@ -0,0 +1,303 @@ +"use client"; + +import Link from "next/link"; +import { ExternalLink } from "lucide-react"; +import { useId, useState } from "react"; +import { getAdNetworkNiche } from "@/lib/ad-network-niches"; +import type { BarFact, GrowthTarget, Lane, Recommendation } from "@/lib/ad-network-requirements/types"; +import type { NetworkLogoFile } from "@/app/ui/ad-networks/network-logo-src"; +import { NetworkLogo } from "@/app/ui/ad-networks/network-logo"; +import { UiButton } from "@/app/ui/controls"; +import styles from "./ad-network-requirements-checker.module.css"; + +export type NetworkInfo = { name: string; logo: NetworkLogoFile | null; directoryHref: string }; +export type NameOf = (slug: string) => NetworkInfo; + +const count = (n: number) => n.toLocaleString("en-US"); +const money = (n: number, currency: BarFact["currency"]) => `${currency === "EUR" ? "€" : "$"}${n.toLocaleString("en-US", { maximumFractionDigits: 2 })}`; + +const ROLE: Record = { + main: "Replaces your ads", + add: "Adds alongside your ads", + setup: "Runs on your own ad setup", +}; + +const ALSO_NEEDS: Record = { + audience_age: "An audience that isn't mostly under 16", + content_policies: "Content that follows their policies", + direct_representation: "You sell the site's ads directly", + domain_age_4_months: "About 4 months of domain history", + domain_age_6_months: "A domain at least 6 months old", + domain_history_4_months_guidance: "About 4 months of domain history", + english: "An English-language site", + exclusive: "Their ads only, no other network", + exclusive_native_widget: "No other recommendation widget", + ga_access: "Google Analytics access for review", + google_analytics: "Google Analytics on the site", + google_standing: "Good standing with Google ads", + grow_30_days: "Grow running for 30 days", + https: "HTTPS", + incubator_limited: "Under 250,000 users, only the small Incubator program", + invitation_only: "An invitation", + not_jimdo: "A site not built on Jimdo", + not_wix: "A site not built on Wix", + organic_audience_50: "At least half your traffic from organic sources", + own_domain: "Your own domain, not a subdomain", + own_gam: "Your own Google Ad Manager account", + privacy_policy: "A privacy policy", + recent_content: "New content in the last 4 months", + replace_adsense_adexchange: "No AdSense or Ad Exchange tags beside theirs", + server_access: "Server access for ads.txt", + propel_setup_fee_99_usd: "Propel only: a $99 setup fee", + site_live_90_days: "A site live at least 90 days", + propel_six_ad_slots: "Propel only: six ad slots", + ten_current_articles: "At least 10 current articles", + three_month_history: "The traffic held for 3 months in a row", + propel_wordpress_or_blogger: "Propel only: WordPress or Blogger", +}; + +// Scopes that only restate "the site" add nothing to the sentence. +const QUIET_SCOPES = new Set(["site", "publisher", "publisher site", "publisher website", "website", "publisher audience", "publisher property", "publisher account and every domain", "all sizes subject to review", "all site sizes subject to review", "US", "below regional PV guide", "small publisher discussion", "Elevate"]); + +function countries(scope: string) { + const list = scope.replace(/^traffic from /, "").split(/\s*[/,]\s*/).filter(Boolean).map((c) => c === "CA" ? "Canada" : c === "NZ" ? "New Zealand" : c); + return list.length > 1 ? `${list.slice(0, -1).join(", ")}, and ${list.at(-1)}` : list[0] ?? ""; +} + +/** One published bar in plain words, such as "At least 25,000 pageviews a month". */ +export function barText(bar: BarFact): string { + if (bar.metric === "none") return "No published traffic minimum"; + const amount = bar.amount ?? 0; + const lead = bar.comparator === "more_than" ? "More than" : "At least"; + const period = bar.period === "month" ? " a month" : bar.period === "day" ? " a day" : bar.period === "30_days" ? " in 30 days" : bar.period === "previous_calendar_year" ? " in the previous calendar year" : ""; + const scope = bar.scope && !QUIET_SCOPES.has(bar.scope) ? bar.scope : null; + switch (bar.metric) { + case "ad_revenue_month": + case "ad_revenue_previous_calendar_year": + return `${bar.kind === "guidance" ? "About" : lead} ${money(amount, bar.currency)} ad revenue${period}`; + case "tier1_share": { + const share = `${amount}% of traffic from ${scope && scope.includes("/") ? countries(scope) : "Tier 1 countries"}`; + // A pageview tier, such as Raptive's "under 100,000 pageviews a month", leads the sentence. + if (scope && /pageviews/.test(scope)) return `${scope.charAt(0).toUpperCase()}${scope.slice(1)}: at least ${share}`; + return `${lead} ${share}`; + } + case "us_share": + return `${lead} ${amount}% of traffic from the US`; + case "tier1_sessions_30d": + return `${lead} ${count(amount)} sessions from Tier 1 countries${period}`; + case "us_pageviews": + return `${lead} ${count(amount)} US pageviews${period}`; + case "monthly_active_users": + return `${lead} ${count(amount)} monthly active users${scope ? ` for ${scope}` : ""}`; + case "organic_unique_visitors_30d": + return `${lead} ${count(amount)} organic unique visitors from ${scope ? countries(scope) : "the US, UK, and Canada"}${period}`; + default: { + const noun = bar.metric === "visits" ? "visits" : bar.metric === "visitors" ? "visitors" : "pageviews"; + const tail = !scope ? "" : scope === "Propel" ? " for Propel" : scope === "typical publisher scale" ? " for a typical publisher" : scope.startsWith("outside") ? ` ${scope}` : scope === "developer sites" || scope === "new sites" ? ` for ${scope}` : ` for traffic from ${scope}`; + return `${lead} ${count(amount)} ${noun}${period}${tail}`; + } + } +} + +function shortBar(values: Recommendation["reason"]["values"]): string | null { + const bar = typeof values.bar === "number" ? values.bar : null; + if (bar === null) return null; + switch (values.metric) { + case "ad_revenue_month": return `${money(bar, "USD")} ad revenue a month`; + case "ad_revenue_previous_calendar_year": return `${money(bar, "USD")} ad revenue a year`; + case "tier1_sessions_30d": return `${count(bar)} Tier 1 sessions a month`; + case "us_pageviews": return `${count(bar)} US pageviews`; + case "visits": return `${count(bar)} visits a month`; + case "visitors": return `${count(bar)} visitors a month`; + case "monthly_active_users": return `${count(bar)} monthly users`; + case "organic_unique_visitors_30d": return `${count(bar)} organic visitors`; + default: return `${count(bar)} pageviews`; + } +} + +function yours(values: Recommendation["reason"]["values"]): string | null { + if (typeof values.yours !== "number") return null; + return String(values.metric).startsWith("ad_revenue") ? money(values.yours, "USD") : count(values.yours); +} + +/** The one-line reason on a card. */ +export function reasonText(card: Recommendation, nameOf: NameOf): string { + const { code, values } = card.reason; + const bar = shortBar(values); + const mine = yours(values); + const currentName = typeof values.current === "string" ? currentLabel(values.current, nameOf) : "your current network"; + switch (code) { + case "upgrade": return `The next step up from ${currentName}.`; + case "check_contract": return `Check your ${currentName} contract first.`; + case "niche_specialist": return `Built for ${getAdNetworkNiche(String(values.niche))?.name.toLowerCase() ?? "sites like yours"} sites.`; + case "revenue_signal": return "Your ad revenue makes it worth a look. It counts last calendar year's earnings."; + case "case_by_case": return "Asks for 50,000 pageviews. Smaller sites are reviewed one by one."; + case "no_minimum": return "No published traffic minimum. Every site is reviewed."; + case "sales_led": return "No published number. Talks to sites your size."; + case "fit_estimate": return "No published number. Fits sites your size."; + case "apply_guidance": return bar ? `Sites usually apply from ${bar}.` : "No fixed number. Fits sites your size."; + case "revenue_bar": + case "published_bar": + case "estimated_bar": { + if (!bar) return "Fits sites your size."; + // The comparator comes from the network's own published bar: "more than" or "at least". + const source = card.detail.bars.find((fact) => fact.metric === values.metric && fact.amount === values.bar); + const asks = source?.comparator === "more_than" ? `Asks for more than ${bar}.` : `Asks for at least ${bar}.`; + return mine ? `${asks} You have ${mine}.` : `${asks} You likely have more.`; + } + } +} + +export function currentLabel(current: string, nameOf: NameOf): string { + if (current === "snigel") return "Snigel"; + if (current === "other") return "your current network"; + return nameOf(current).name; +} + +const STATUS: Record = { + good_fit: "Good fit", + worth_a_try: "Worth a try", + growth_target: "Growth target", +}; + +export function StatusText({ status }: { status: keyof typeof STATUS }) { + return {STATUS[status]}; +} + +function checked(iso: string) { + const date = new Date(`${iso}T00:00:00Z`); + return date.toLocaleDateString("en-GB", { day: "numeric", month: "short", year: "numeric", timeZone: "UTC" }); +} + +function ApplyLink({ href, name }: { href: string; name: string }) { + return ( + + Apply + + ); +} + +function title(card: { slug: string; program: string | null }, nameOf: NameOf) { + const info = nameOf(card.slug); + return card.program ? `${info.name} ${card.program}` : info.name; +} + +export function RecommendationCard({ card, nameOf, niche, rank }: { card: Recommendation; nameOf: NameOf; niche: string; rank: number }) { + const [open, setOpen] = useState(false); + const detailId = useId(); + const info = nameOf(card.slug); + const name = title(card, nameOf); + const required = card.detail.bars.filter((bar) => bar.kind === "requirement"); + // Traffic and revenue bars are alternative routes: clearing any one is enough. Share rules apply on top. + const routes = required.filter((bar) => !SHARE_METRICS.has(bar.metric)); + const shares = required.filter((bar) => SHARE_METRICS.has(bar.metric)); + const guidance = card.detail.bars.filter((bar) => bar.kind === "guidance"); + // Clickio and Publift: a revenue rule, with traffic levels published as a guide instead. + const guidanceIsAlternative = routes.length > 0 && routes.every((bar) => bar.metric === "ad_revenue_month") && guidance.some((bar) => bar.metric === "pageviews"); + const allSources = [...new Map(card.detail.sources.map((source) => [source.url, source])).values()]; + const sources = allSources.slice(0, 3); + const moreSources = allSources.length - sources.length; + const nicheName = getAdNetworkNiche(niche)?.name.toLowerCase(); + const rows = [ + { label: "What they ask", value: required.length ? : "No published bar" }, + ...(guidance.length ? [{ label: guidanceIsAlternative ? "Or, as a guide" : "Their guidance", value: }] : []), + ...(card.detail.alsoNeeds.length ? [{ label: "Also needs", value:
    {card.detail.alsoNeeds.map((key) =>
  • {ALSO_NEEDS[key] ?? key}
  • )}
}] : []), + ...(card.detail.peers !== null && nicheName ? [{ label: "Sites we track", value: `${count(card.detail.peers)} ${nicheName} sites use it` }] : []), + ...(sources.length ? [{ label: sources.length > 1 ? "Sources" : "Source", value:
    {sources.map((source) =>
  • {source.label}, checked {checked(source.checkedAt)}
  • )}
}] : []), + ]; + return ( +
  • +
    + + +
    +

    + {name} + +

    +

    {reasonText(card, nameOf)}

    + {card.lane === "main" ? null :

    {ROLE[card.lane]}

    } +
    +
    + + setOpen((value) => !value)} type="button" variant="ghost"> + Details + +
    +
    + +
  • + ); +} + +const SHARE_METRICS = new Set(["tier1_share", "us_share"]); + +function AskList({ routes, shares }: { routes: BarFact[]; shares: BarFact[] }) { + const lines = [ + ...routes.map((bar, index) => { + const text = barText(bar); + return index === 0 ? text : `Or ${text.charAt(0).toLowerCase()}${text.slice(1)}`; + }), + ...shares.map(barText), + ]; + if (lines.length === 1) return <>{lines[0]}; + return
      {lines.map((line) =>
    • {line}
    • )}
    ; +} + +function BarList({ bars }: { bars: BarFact[] }) { + if (bars.length === 1) return <>{barText(bars[0])}; + return
      {bars.map((bar) =>
    • {barText(bar)}
    • )}
    ; +} + +export function CompactRow({ card, nameOf }: { card: Recommendation; nameOf: NameOf }) { + const info = nameOf(card.slug); + const name = title(card, nameOf); + return ( +
  • + +
    +

    + {name} + +

    +

    {reasonText(card, nameOf)}

    +
    +
    + +
    +
  • + ); +} + +export function GrowthRow({ nameOf, target }: { nameOf: NameOf; target: GrowthTarget }) { + const info = nameOf(target.slug); + return ( +
  • + +
    +

    + {title(target, nameOf)} + +

    +

    {barText(target.bar)}

    +
    +
    + Details +
    +
  • + ); +} diff --git a/app/(site)/(tools)/ad-revenue-calculator/ad-revenue-calculator-from-url.tsx b/app/(site)/(tools)/ad-revenue-calculator/ad-revenue-calculator-from-url.tsx new file mode 100644 index 00000000..b6051661 --- /dev/null +++ b/app/(site)/(tools)/ad-revenue-calculator/ad-revenue-calculator-from-url.tsx @@ -0,0 +1,12 @@ +"use client"; + +import { useInitialQuery } from "@/app/ui/tools/use-initial-query"; +import { adRevenueInputFromQuery } from "@/lib/ad-revenue-calculator/engine"; +import { AdRevenueCalculator } from "./ad-revenue-calculator"; + +// Reads a shared link in the browser so the page stays static. A clean URL opens on the example. +export function AdRevenueCalculatorFromUrl() { + const query = useInitialQuery(); + const input = query.key === "default" ? null : adRevenueInputFromQuery(query.get); + return ; +} diff --git a/app/(site)/(tools)/ad-revenue-calculator/ad-revenue-calculator.module.css b/app/(site)/(tools)/ad-revenue-calculator/ad-revenue-calculator.module.css new file mode 100644 index 00000000..f586aa85 --- /dev/null +++ b/app/(site)/(tools)/ad-revenue-calculator/ad-revenue-calculator.module.css @@ -0,0 +1,46 @@ +.form { + display: grid; + gap: var(--space-6); + min-width: 0; +} + +/* Two fields per row on wide screens, so a field left alone on its row keeps the same width. */ +.pairRow { + grid-template-columns: repeat(2, minmax(0, 1fr)); +} + +.head { + display: flex; +} + +.lead { + display: grid; + gap: var(--space-3); + min-width: 0; +} + +/* Monthly and yearly side by side, on the same columns as the fields above. */ +.pair { + display: grid; + gap: var(--space-8); + grid-template-columns: repeat(2, minmax(0, 1fr)); + min-width: 0; +} + +.working { + color: var(--color-text-muted); + font-family: var(--font-mono); + font-size: var(--text-small); + margin: 0; +} + +.share { + display: flex; +} + +@media (max-width: 640px) { + .pairRow, + .pair { + grid-template-columns: minmax(0, 1fr); + } +} diff --git a/app/(site)/(tools)/ad-revenue-calculator/ad-revenue-calculator.tsx b/app/(site)/(tools)/ad-revenue-calculator/ad-revenue-calculator.tsx new file mode 100644 index 00000000..e6e13148 --- /dev/null +++ b/app/(site)/(tools)/ad-revenue-calculator/ad-revenue-calculator.tsx @@ -0,0 +1,359 @@ +"use client"; + +import { RotateCcw } from "lucide-react"; +import { useEffect, useId, useRef, useState, type FormEvent, type RefObject } from "react"; +import { UiButton, UiQuantityInput, UiShareAction, UiTextField, uiOption } from "@/app/ui/controls"; +import { UiActionRow, UiMetricGroup, UiPrimaryResult, UiStatus, UiStatusWord } from "@/app/ui/display"; +import { UiTabRow, uiTabPanelProps } from "@/app/ui/tabs"; +import { ToolFieldRow, ToolResult, ToolWorkbench } from "@/app/ui/tools/tool-workbench"; +import { + AD_REVENUE_EXAMPLE_INPUT, + adRevenueShareParams, + calculateAdRevenue, + isAdRevenueTab, + isTrafficUnit, + unitWord, + type AdRevenueErrors, + type AdRevenueField, + type AdRevenueInput, + type AdRevenueTab, + type AdRevenueValues, + type Cents, + type TrafficUnit, +} from "@/lib/ad-revenue-calculator/engine"; +import styles from "./ad-revenue-calculator.module.css"; + +type Shown = { input: AdRevenueInput; values: AdRevenueValues | null }; + +const tabs = [ + { id: "revenue", title: "Revenue" }, + { id: "cpm", title: "CPM to RPM" }, + { id: "rpm", title: "Find RPM" }, +]; +const trafficUnits = [uiOption("pageviews", "Pageviews"), uiOption("sessions", "Sessions")]; +const impressionUnits = [uiOption("pageviews", "per pageview"), uiOption("sessions", "per session")]; +const buttonLabel: Record = { revenue: "Calculate revenue", cpm: "Calculate RPM", rpm: "Find RPM" }; +const focusOrder: Record = { + revenue: ["traffic", "rpm"], + cpm: ["cpm", "impressions", "traffic"], + rpm: ["revenue", "traffic"], +}; + +/* ---------------- formatting ---------------- */ + +function formatInteger(value: bigint): string { + return new Intl.NumberFormat("en-US", { maximumFractionDigits: 0 }).format(value); +} + +function formatCents(cents: bigint): string { + return `$${formatInteger(cents / 100n)}.${(cents % 100n).toString().padStart(2, "0")}`; +} + +function formatMoney(value: Cents | null): string { + if (!value) return "—"; + return value.underCent ? "Under $0.01" : formatCents(value.cents); +} + +function formatHundredths(hundredths: bigint): string { + const fraction = (hundredths % 100n).toString().padStart(2, "0").replace(/0+$/, ""); + return `${formatInteger(hundredths / 100n)}${fraction ? `.${fraction}` : ""}`; +} + +function rpmLabel(unit: TrafficUnit): string { + return unit === "sessions" ? "Session RPM" : "Page RPM"; +} + +function calculate(input: AdRevenueInput) { + try { + return calculateAdRevenue(input); + } catch { + return null; + } +} + +function firstError(errors: AdRevenueErrors, tab: AdRevenueTab): AdRevenueField | null { + return focusOrder[tab].find((field) => field in errors) ?? null; +} + +/* ---------------- the tool ---------------- */ + +export function AdRevenueCalculator({ initialInput }: { initialInput?: AdRevenueInput }) { + const shared = initialInput !== undefined; + const [first] = useState(() => { + const input = initialInput ?? AD_REVENUE_EXAMPLE_INPUT; + const calculation = calculate(input); + const tab = isAdRevenueTab(input.tab) ? input.tab : "revenue"; + const errors = shared ? calculation?.errors ?? {} : {}; + return { + input, + shown: { input, values: calculation?.status === "valid" ? calculation.values : null } satisfies Shown, + errors, + focus: shared ? firstError(errors, tab) : null, + }; + }); + const [input, setInput] = useState(first.input); + const [shown, setShown] = useState(first.shown); + const [errors, setErrors] = useState(first.errors); + const [isExample, setIsExample] = useState(!shared); + const [isStale, setIsStale] = useState(false); + const [failed, setFailed] = useState(false); + const [focusTarget, setFocusTarget] = useState(first.focus); + const panelId = useId(); + const formRef = useRef(null); + // Edited since the example, so a tab switch no longer shows an example answer. + const edited = useRef(false); + const answerRef = useRef(null); + + useEffect(() => { + if (!focusTarget) return; + if (focusTarget === "answer") answerRef.current?.focus(); + else formRef.current?.querySelector(`[data-focus-key="${focusTarget}"]`)?.focus(); + setFocusTarget(null); + }, [focusTarget]); + + const tab: AdRevenueTab = isAdRevenueTab(input.tab) ? input.tab : "revenue"; + const unit: TrafficUnit = isTrafficUnit(input.unit) ? input.unit : "pageviews"; + + function edit(next: AdRevenueInput, clearKeys: AdRevenueField[]) { + setInput(next); + setIsStale(true); + setFailed(false); + edited.current = true; + if (clearKeys.some((key) => key in errors)) { + setErrors((current) => { + const rest = { ...current }; + for (const key of clearKeys) delete rest[key]; + return rest; + }); + } + } + + function setField(field: AdRevenueField, value: string) { + edit({ ...input, [field]: value }, [field]); + } + + // The unit changes every label and error message, so old errors go with it. + function setUnit(value: string) { + setInput({ ...input, unit: value }); + setIsStale(true); + edited.current = true; + setErrors({}); + } + + // A tab is a different question about the same numbers, so switching answers it right away + // when it can. Errors wait for the button. + function selectTab(id: string) { + if (id === input.tab) return; + const next = { ...input, tab: id }; + setInput(next); + setErrors({}); + setFailed(false); + const calculation = calculate(next); + if (calculation?.status === "valid") { + setShown({ input: next, values: calculation.values }); + setIsStale(false); + if (edited.current) setIsExample(false); + } else { + setIsStale(true); + } + } + + function submit(event?: FormEvent) { + event?.preventDefault(); + const calculation = calculate(input); + if (!calculation) { + setFailed(true); + return; + } + setFailed(false); + setErrors(calculation.errors); + if (calculation.status === "valid") { + setShown({ input, values: calculation.values }); + setIsStale(false); + setIsExample(false); + } + setFocusTarget(firstError(calculation.errors, tab) ?? "answer"); + } + + function reset() { + const example = { ...AD_REVENUE_EXAMPLE_INPUT, tab }; + const calculation = calculate(example); + edited.current = false; + setInput(example); + setShown({ input: example, values: calculation?.status === "valid" ? calculation.values : null }); + setErrors({}); + setIsExample(true); + setIsStale(false); + setFailed(false); + } + + const trafficField = ( + setField("traffic", value)} + onUnitChange={setUnit} + required={tab !== "cpm"} + unit={unit} + unitAriaLabel="Traffic unit" + units={trafficUnits} + value={input.traffic} + /> + ); + + return ( + + +
    + {tab === "revenue" ? ( + + {trafficField} + setField("rpm", value)} + required + suffix="USD" + value={input.rpm} + /> + + ) : null} + + {tab === "cpm" ? ( + <> + + setField("cpm", value)} + required + suffix="USD" + value={input.cpm} + /> + setField("impressions", value)} + onUnitChange={setUnit} + required + unit={unit} + unitAriaLabel="Ad impressions per" + units={impressionUnits} + value={input.impressions} + /> + + {trafficField} + + ) : null} + + {tab === "rpm" ? ( + + setField("revenue", value)} + required + suffix="USD" + value={input.revenue} + /> + {trafficField} + + ) : null} + + + {failed ? Couldn't calculate. Try again. : isStale ? Inputs changed : null} + {buttonLabel[tab]} + + + +
    + + + + +
    + ); +} + +/* ---------------- the result ---------------- */ + +function ResultView({ answerRef, isExample, shown }: { + answerRef: RefObject; + isExample: boolean; + shown: Shown; +}) { + const { values } = shown; + const tab: AdRevenueTab = values?.tab ?? (isAdRevenueTab(shown.input.tab) ? shown.input.tab : "revenue"); + const unit: TrafficUnit = values?.unit ?? (isTrafficUnit(shown.input.unit) ? shown.input.unit : "pageviews"); + const traffic = values?.traffic ?? null; + const trafficText = traffic !== null ? `${formatInteger(traffic)} ${unitWord(unit, traffic !== 1n)}` : ""; + + let working = ""; + if (values && tab === "revenue" && traffic !== null) { + working = `${trafficText} × ${formatMoney(values.rpm)} ÷ 1,000 a month`; + } else if (values && tab === "cpm" && values.cpmCents !== null && values.impressionsHundredths !== null) { + const count = values.impressionsHundredths; + working = `${formatCents(values.cpmCents)} CPM × ${formatHundredths(count)} ad ${count === 100n ? "impression" : "impressions"} per ${unitWord(unit, false)}`; + } else if (values && tab === "rpm" && values.revenueCents !== null) { + working = `${formatCents(values.revenueCents)} ÷ ${trafficText} × 1,000`; + } + + const monthly = ( + + ); + const yearly = ; + + return ( + <> + {isExample ?
    Example
    : null} + + {tab === "revenue" ? ( +
    +
    {monthly}{yearly}
    + {working ?

    {working}

    : null} +
    + ) : ( + <> + {working} : undefined} + inputRef={answerRef} + label={rpmLabel(unit)} + value={values ? formatMoney(values.rpm) : "—"} + /> +
    {monthly}{yearly}
    + + )} + + {tab === "cpm" && values?.impressions ? ( + + ) : null} + + {values ? ( +
    + +
    + ) : null} + + ); +} diff --git a/app/(site)/(tools)/ad-revenue-calculator/content/article.mdx b/app/(site)/(tools)/ad-revenue-calculator/content/article.mdx new file mode 100644 index 00000000..7947e848 --- /dev/null +++ b/app/(site)/(tools)/ad-revenue-calculator/content/article.mdx @@ -0,0 +1,34 @@ +## What is RPM? + +RPM means revenue per mille: what you earn for every 1,000 pageviews (page RPM) or sessions (session RPM). It adds up every ad on the page. [Google defines it](https://support.google.com/adsense/answer/190515) as estimated earnings divided by pageviews, times 1,000. + + + +RPM = ad revenue ÷ pageviews × 1,000 + + + +## What's the difference between CPM and RPM? + +CPM is what an advertiser pays for 1,000 views of one ad. RPM is what you earn for 1,000 pageviews across every ad. When a page loads more than one ad, your RPM is higher than your CPM. Enter the CPM your network shows you, after its cut, so the RPM matches what you're paid. + +| | CPM | RPM | +| --- | --- | --- | +| Counted per | 1,000 ad impressions | 1,000 pageviews or sessions | +| Tells you | The price of one ad slot | What your traffic earns | + +## Page RPM or session RPM? + +Use whichever your network reports. A session usually includes more than one pageview, so session RPM runs higher than page RPM for the same site. [Mediavine](https://www.mediavine.com/why-does-my-rpm-change/) points out the two can't be compared directly, so compare page RPM with page RPM. + +## Is my dashboard RPM before or after the network's cut? + +After, for most networks. [AdSense reports your share](https://support.google.com/adsense/answer/180195) once Google takes its part, so its RPM is your share, not the advertiser's price. + +## What's a good RPM? + +It depends on your niche, where your readers live, and your ad network. We don't show a typical range, because published figures mix page and session RPM and measure different sites. Your own RPM over a few months is the best benchmark. + +## How is the answer worked out? + +Revenue is traffic × RPM ÷ 1,000. RPM from CPM is CPM × ad impressions per pageview or session. RPM from revenue is revenue ÷ traffic × 1,000. Yearly figures use 12 months at the same traffic and RPM, and every result is rounded to the cent only at the end. Nothing you type leaves your browser. diff --git a/app/(site)/(tools)/ad-revenue-calculator/content/intro.mdx b/app/(site)/(tools)/ad-revenue-calculator/content/intro.mdx new file mode 100644 index 00000000..9307d09e --- /dev/null +++ b/app/(site)/(tools)/ad-revenue-calculator/content/intro.mdx @@ -0,0 +1 @@ +Know your monthly traffic and your RPM, CPM, or last month's ad earnings? Pick the tab that matches what you have, and you'll see your RPM and what you earn a month and a year. Choose pageviews or sessions to match how your ad network reports RPM. diff --git a/app/(site)/(tools)/ad-revenue-calculator/content/usage.mdx b/app/(site)/(tools)/ad-revenue-calculator/content/usage.mdx new file mode 100644 index 00000000..89ccc069 --- /dev/null +++ b/app/(site)/(tools)/ad-revenue-calculator/content/usage.mdx @@ -0,0 +1,15 @@ +## What do I need to enter? + +Your monthly traffic from your analytics or ad dashboard, plus one or two numbers from your ad network. + +| Tab | You enter | You get | +| --- | --- | --- | +| Revenue | Traffic and RPM | Monthly and yearly revenue | +| CPM to RPM | CPM and ad impressions per pageview or session | Your RPM, plus revenue if you add traffic | +| Find RPM | One month's ad revenue and traffic | Your RPM | + +Pick pageviews or sessions to match your network. AdSense reports page RPM. Mediavine reports session RPM. + +## How do I read the result? + +The yearly figure assumes every month looks like this one. Ad rates move through the year, so treat it as a rough total, not a forecast. diff --git a/app/(site)/(tools)/ad-revenue-calculator/layout.tsx b/app/(site)/(tools)/ad-revenue-calculator/layout.tsx new file mode 100644 index 00000000..3a497ef1 --- /dev/null +++ b/app/(site)/(tools)/ad-revenue-calculator/layout.tsx @@ -0,0 +1,6 @@ +import { registryLayout } from "@/lib/registry-layout"; + +const registry = registryLayout("/ad-revenue-calculator"); +export const generateMetadata = registry.generateMetadata; +export const revalidate = false; +export default registry.Layout; diff --git a/app/(site)/(tools)/ad-revenue-calculator/page.tsx b/app/(site)/(tools)/ad-revenue-calculator/page.tsx new file mode 100644 index 00000000..4124976e --- /dev/null +++ b/app/(site)/(tools)/ad-revenue-calculator/page.tsx @@ -0,0 +1,25 @@ +import { Coins } from "lucide-react"; +import { ToolPageShell } from "@/app/ui/tools/tool-page-shell"; +import { ToolPageArticle, ToolPageHeader } from "@/app/ui/site/tool-page-content"; +import { PageCanvas } from "@/app/ui/site/page-canvas"; +import { getRequiredToolPage } from "@/lib/tool-pages"; +import { AdRevenueCalculatorFromUrl } from "./ad-revenue-calculator-from-url"; +import Article from "./content/article.mdx"; +import Intro from "./content/intro.mdx"; +import Usage from "./content/usage.mdx"; + +export default async function AdRevenueCalculatorPage() { + const toolPage = await getRequiredToolPage("ad-revenue-calculator"); + return ( + + + } intro={} toolPage={toolPage} /> + + + +
    + + + + ); +} diff --git a/app/ui/ad-networks/details.module.css b/app/ui/ad-networks/details.module.css index 1494e48b..8c13ea39 100644 --- a/app/ui/ad-networks/details.module.css +++ b/app/ui/ad-networks/details.module.css @@ -105,6 +105,18 @@ font: var(--weight-semibold) 1.6rem / 1.1 var(--font-mono); letter-spacing: -0.02em; margin: 0; + overflow-wrap: anywhere; +} + +@media (max-width: 500px) { + .keyNumbers { + grid-template-columns: 1fr; + } + + .keyNumbers > div + div { + border-left: 0; + border-top: 1px solid var(--color-border); + } } /* Facts */ diff --git a/app/ui/art/ad-network-requirements-checker.spec.json b/app/ui/art/ad-network-requirements-checker.spec.json new file mode 100644 index 00000000..a17af7f2 --- /dev/null +++ b/app/ui/art/ad-network-requirements-checker.spec.json @@ -0,0 +1,11 @@ +{ + "id": "catalog--ad-network-requirements-checker", + "type": "toolSpot", + "takeaway": "A signpost points to three ad networks, with the top choice marked as the pick.", + "source": "conceptual figure, no external data", + "dataAsOf": "2026-10-23", + "width": 140, + "height": 110, + "seed": 527, + "data": { "motif": "adNetworkShortlist" } +} diff --git a/app/ui/art/ad-network-requirements-checker.svg b/app/ui/art/ad-network-requirements-checker.svg new file mode 100644 index 00000000..915d3069 --- /dev/null +++ b/app/ui/art/ad-network-requirements-checker.svg @@ -0,0 +1,26 @@ + +A signpost points to three ad networks, with the top choice marked as the pick. + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/ui/art/ad-network-requirements-checker.ts b/app/ui/art/ad-network-requirements-checker.ts new file mode 100644 index 00000000..080302d7 --- /dev/null +++ b/app/ui/art/ad-network-requirements-checker.ts @@ -0,0 +1,28 @@ +// generated by scripts/stack127/marker-art/generate.mjs. do not edit. +// edit the sibling .spec.json and rerun: npm run stack127:marker-art +export const adNetworkRequirementsCheckerArt = ` +A signpost points to three ad networks, with the top choice marked as the pick. + + + + + + + + + + + + + + + + + + + + + + + +`; diff --git a/app/ui/art/ad-revenue-calculator.spec.json b/app/ui/art/ad-revenue-calculator.spec.json new file mode 100644 index 00000000..5991d29d --- /dev/null +++ b/app/ui/art/ad-revenue-calculator.spec.json @@ -0,0 +1,11 @@ +{ + "id": "catalog--ad-revenue-calculator", + "type": "toolSpot", + "takeaway": "A stack of site pages turns into a stack of coins, showing traffic becoming ad revenue.", + "source": "conceptual figure, no external data", + "dataAsOf": "2026-10-23", + "width": 140, + "height": 110, + "seed": 529, + "data": { "motif": "adRevenue" } +} diff --git a/app/ui/art/ad-revenue-calculator.svg b/app/ui/art/ad-revenue-calculator.svg new file mode 100644 index 00000000..8cca0931 --- /dev/null +++ b/app/ui/art/ad-revenue-calculator.svg @@ -0,0 +1,24 @@ + +A stack of site pages turns into a stack of coins, showing traffic becoming ad revenue. + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/ui/art/ad-revenue-calculator.ts b/app/ui/art/ad-revenue-calculator.ts new file mode 100644 index 00000000..e7c9c022 --- /dev/null +++ b/app/ui/art/ad-revenue-calculator.ts @@ -0,0 +1,26 @@ +// generated by scripts/stack127/marker-art/generate.mjs. do not edit. +// edit the sibling .spec.json and rerun: npm run stack127:marker-art +export const adRevenueCalculatorArt = ` +A stack of site pages turns into a stack of coins, showing traffic becoming ad revenue. + + + + + + + + + + + + + + + + + + + + + +`; diff --git a/app/ui/art/publisher-tools.spec.json b/app/ui/art/publisher-tools.spec.json new file mode 100644 index 00000000..78f3880c --- /dev/null +++ b/app/ui/art/publisher-tools.spec.json @@ -0,0 +1,11 @@ +{ + "id": "catalog--publisher-tools", + "type": "toolSpot", + "takeaway": "A site page sits beside a traffic gate and a separate network tag gate.", + "source": "conceptual figure, no external data", + "dataAsOf": "2026-10-22", + "width": 140, + "height": 110, + "seed": 528, + "data": { "motif": "publisherTools" } +} diff --git a/app/ui/art/publisher-tools.svg b/app/ui/art/publisher-tools.svg new file mode 100644 index 00000000..d22ee631 --- /dev/null +++ b/app/ui/art/publisher-tools.svg @@ -0,0 +1,20 @@ + +A site page sits beside a traffic gate and a separate network tag gate. + + + + + + + + + + + + + + + + + + diff --git a/app/ui/art/publisher-tools.ts b/app/ui/art/publisher-tools.ts new file mode 100644 index 00000000..788aa0d8 --- /dev/null +++ b/app/ui/art/publisher-tools.ts @@ -0,0 +1,22 @@ +// generated by scripts/stack127/marker-art/generate.mjs. do not edit. +// edit the sibling .spec.json and rerun: npm run stack127:marker-art +export const publisherToolsArt = ` +A site page sits beside a traffic gate and a separate network tag gate. + + + + + + + + + + + + + + + + + +`; diff --git a/app/ui/controls.tsx b/app/ui/controls.tsx index b1062a06..1bd948bb 100644 --- a/app/ui/controls.tsx +++ b/app/ui/controls.tsx @@ -815,7 +815,9 @@ export function UiComboBox({ description, error, hint, label, onChange, onInputC return ( onChange?.(key === null ? null : String(key))} diff --git a/app/ui/site/app-shell.tsx b/app/ui/site/app-shell.tsx index b71b83a9..a4299ef9 100644 --- a/app/ui/site/app-shell.tsx +++ b/app/ui/site/app-shell.tsx @@ -49,12 +49,6 @@ function SiteFooter() { about labs - - LetsLaunch reservation - - - ScrollLaunch launch page -

    2026 stack127. all rights reserved.

    diff --git a/app/ui/site/google-analytics-consent.tsx b/app/ui/site/google-analytics-consent.tsx index 8dc059fb..4a0cbf49 100644 --- a/app/ui/site/google-analytics-consent.tsx +++ b/app/ui/site/google-analytics-consent.tsx @@ -79,7 +79,7 @@ export function AnalyticsSettingsButton() { onClick={() => window.dispatchEvent(new Event(openSettingsEvent))} type="button" > - analytics settings + consent ); } diff --git a/app/ui/tabs.tsx b/app/ui/tabs.tsx index 209c88d0..ddbca925 100644 --- a/app/ui/tabs.tsx +++ b/app/ui/tabs.tsx @@ -104,3 +104,56 @@ export function UiTabs({ headingLevel = 3, label, tabs }: { headingLevel?: Headi ); } + +export type UiTabRowItem = { id: string; title: string }; + +/** + * A tab row over one panel the caller renders, such as a tool with several ways to calculate. + * The caller owns the active tab, so a shared link can open any of them, and spreads + * `uiTabPanelProps(panelId, value)` on the panel. Same look and keys as `UiTabs`. + */ +export function UiTabRow({ label, onChange, panelId, tabs, value }: { + label: string; + onChange: (id: string) => void; + panelId: string; + tabs: readonly UiTabRowItem[]; + value: string; +}) { + const buttons = useRef<(HTMLButtonElement | null)[]>([]); + const active = Math.max(0, tabs.findIndex((tab) => tab.id === value)); + + const onKeyDown = (event: KeyboardEvent) => { + const count = tabs.length; + const next = { ArrowRight: (active + 1) % count, ArrowLeft: (active - 1 + count) % count, Home: 0, End: count - 1 }[event.key]; + if (next === undefined) return; + event.preventDefault(); + onChange(tabs[next].id); + buttons.current[next]?.focus(); + }; + + return ( +
    + {tabs.map((tab, index) => ( + + ))} +
    + ); +} + +/** Props for the panel under a `UiTabRow`. */ +export function uiTabPanelProps(panelId: string, value: string) { + return { "aria-labelledby": `${panelId}-tab-${value}`, id: panelId, role: "tabpanel" } as const; +} diff --git a/content_docs/ad-network-requirements-checker/recommendation-model.md b/content_docs/ad-network-requirements-checker/recommendation-model.md new file mode 100644 index 00000000..d62b6a1c --- /dev/null +++ b/content_docs/ad-network-requirements-checker/recommendation-model.md @@ -0,0 +1,596 @@ +# Recommendation model: ad network requirements checker + +Research: [research.md](research.md). Product contract: [tool-spec.md](tool-spec.md). Evidence: [recommendation-profiles-a.json](../ad-networks/recommendation-profiles-a.json), [recommendation-profiles-b.json](../ad-networks/recommendation-profiles-b.json). + +This is the backstage model. It turns a few numbers into a short, estimated list of where to apply. The person sees one `Estimate` label on the whole result, a status per network (`Good fit`, `Worth a try`, or `Growth target`), and one short reason. Scores, weights, bases, and ranges stay backstage. + +Every number in [Expected rankings](#expected-rankings) was recalculated from the rules in this file after the first arithmetic review. A fresh review is planned. If a later change to a prior moves a scenario, update the scenario in the same change and say why. + +## Principles + +1. **Everything is an estimate.** No status means approved, eligible, or confirmed. The strongest word is `Good fit`. +2. **Three kinds of evidence, kept apart.** Official (the network's own page), reported (publisher posts, vendor cases), editorial (our judgment). Editorial numbers rank. They never show as a requirement. +3. **Units stay separate.** Pageviews, sessions, visits, visitors, and monthly active users are different measures. Conversions use editorial ratio ranges. +4. **Small sites never see sales-led enterprise products.** Scale floors, evidence weight, access weight, and the low-evidence cap keep them down. +5. **No acceptance odds, no RPM, no earnings, no invented history.** Monthly revenue is used as it is, a current run rate. It's never turned into last year's income or derived from traffic. Revenue is never converted between currencies. +6. **Peers only when real.** Same niche, confirmed relationship, at least 5 sites. Otherwise the peer factor is left out. + +## Inputs the model reads + +From the [tool-spec](tool-spec.md#inputs). Everything except niche can be blank. + +| Key | Meaning | +| --- | --- | +| `niche` | One of the 20 `adNetworkNiches` slugs, or `other` | +| `pageviews` | Pageviews in a typical recent month | +| `visits` + `visitsUnit` | A second traffic number and what the analytics calls it: `sessions`, `visits`, or `users` | +| `siteAge` | `lt3m`, `3to6m`, `6to12m`, `gt12m`, or blank | +| `tier1Share` | % of traffic from the US, UK, Canada, Australia, and New Zealand | +| `current` | A network slug, `snigel`, `none`, `other`, or blank | +| `adRevenueMonth` | USD ad revenue in a typical recent month | +| Advanced: `shareUS`, `shareGB`, `shareCA`, `shareAU`, `shareNZ` | Optional country split inside Tier 1 | + +There are no inputs for language, site platform, Google Ad Manager, region outside Tier 1, or site address in this version. Rules that depend on those are named in a network's detail, not used to filter. + +## Step 1. Estimate the measures + +Each measure is an interval `[lo, hi]` with an `exact` flag. An entered value is `[v, v]`, exact. + +The ratio ranges below are editorial assumptions, picked wide on purpose so the model stays careful. They aren't measured from data. + +| Ratio | Range | Used for | +| --- | --- | --- | +| Pageviews per session | 1.2 to 2.0 | Pageviews from sessions, and sessions from pageviews | +| Visitors per session | 0.6 to 0.9 | Visitors and monthly active users from sessions, and sessions from users | +| US inside Tier 1 | 0.55 to 0.9 of Tier 1 | Prior for the US share | +| US, UK, Canada inside Tier 1 | 0.85 to 0.98 of Tier 1 | Prior for The Moneytizer's countries | +| New Zealand inside Tier 1 | 0 to 3 points | Prior for Monumetric's countries: [Tier 1 lo − 3, Tier 1 hi], floored at 0 | +| Organic share | 0.5 to 1.0 | The Moneytizer only | + +### Countries + +**Reconcile the inputs first.** Let `K` be the sum of the entered splits. + +| Inputs | Tier 1 used | Validation | +| --- | --- | --- | +| All five splits, Tier 1 blank | `[K, K]`, exact | `K` ≤ 100 | +| All five splits and Tier 1 | `[K, K]`, exact. Tier 1 is normalized to `K`. | `split_mismatch` when they differ by more than 0.5 points | +| Some splits and Tier 1 | `[max(Tier 1, K), max(Tier 1, K)]`, exact | `shares_over_tier1` when `K` > Tier 1 + 0.5 | +| Some splits, Tier 1 blank | `[K, 100]`, estimated | `K` ≤ 100 | +| Tier 1 only | `[Tier 1, Tier 1]`, exact | | +| Nothing | `[0, 100]`, estimated, and flagged `noCountryInput` | | + +**Feasible bounds for a set of countries.** For a set `A` (such as US, UK, Canada for The Moneytizer), take `KA` = entered shares inside `A`, the unknown countries inside `A` (`UA`) and outside it (`UB`), and the remaining Tier 1 `R` = [Tier 1 lo − K, Tier 1 hi − K], floored at 0. + +| Case | Feasible share of `A` | +| --- | --- | +| No unknown countries in `A` | `[KA, KA]`, exact. This respects entered zeros. | +| Unknowns only inside `A` | `[KA + R lo, KA + R hi]`, exact when Tier 1 is exact | +| Unknowns inside and outside `A` | `[KA, KA + R hi]`, estimated | + +**Then intersect with the editorial prior** when the feasible interval isn't exact. If the intersection is empty, use the feasible interval alone. A point never appears unless the inputs make it one. + +| Aggregate | Set | Prior | +| --- | --- | --- | +| US share | US | Tier 1 × [0.55, 0.9] | +| Monumetric share | US, UK, Canada, Australia | [Tier 1 lo − 3, Tier 1 hi] | +| Moneytizer share | US, UK, Canada | Tier 1 × [0.85, 0.98] | + +Examples: + +- Tier 1 60 and UK 50, the rest blank: US feasible [0, 10], prior [33, 54], no overlap, so US is [0, 10]. Monumetric [57, 60]. Moneytizer [51, 58.8]. +- US, UK, Canada 0, Australia 50, New Zealand 50: Tier 1 is 100, exact. Moneytizer share is [0, 0], exact. +- Five splits adding up to 55 with Tier 1 65: `split_mismatch`. With Tier 1 55.4: Tier 1 becomes 55. + +### Traffic and revenue + +| Measure | How it's built | Exact when | +| --- | --- | --- | +| Pageviews | Entered, or sessions × [1.2, 2.0] | Entered | +| Sessions | `visits` when the unit is `sessions` or `visits`. From `users`: users ÷ [0.9, 0.6]. Else pageviews ÷ [2.0, 1.2]. | Entered as sessions or visits | +| Visits (Sovrn) | Equal to sessions | Entered with unit `visits` | +| Visitors and monthly active users | `visits` when the unit is `users`, else sessions × [0.6, 0.9] | Never: an analytics user count isn't the network's visitor or MAU count | +| Tier 1 sessions in 30 days (Journey) | Sessions × Tier 1 | Never | +| US pageviews (Newor) | Pageviews × US share | Pageviews entered and US share exact | +| Organic US/UK/CA uniques in 30 days (Moneytizer) | Visitors × Moneytizer share × [0.5, 1.0] | Never | +| Ad revenue a month | Entered only | Entered | + +Estimated measures never give the `published_number` basis, and detail lines say "about". + +## Step 2. Pick the program + +Before any filter or score, networks with several programs pick one. This fixes the program's tier for the step-down filter and for `TM`. + +| Network | Rule | Tier | +| --- | --- | --- | +| Newor Media | Premier when US pageviews lo ≥ 420,000. Else Catapult when US pageviews lo ≥ 60,000. Else Elevate, including a US pageview range that only straddles 60,000. | Elevate 1, Catapult 2, Premier 3 | +| Setupad | Self-Serve when visits lo ≥ 10,000,000. Else Managed. | 3 | +| Adnimation | Standard. MAP is named in the detail only. | 3 | + +Picking by `lo` keeps it deterministic: a program is chosen only when the low end clears its bar. + +## Step 3. Filter out what can't apply + +A network is dropped before scoring when any of these is true: + +- It's a legacy brand: `pubnation`, `pubgalaxy`. +- It's the current network, or in its family. Family `mediavine` holds Journey and Mediavine Official. Current Journey drops Journey only. Current Mediavine or PubNation drops both. Current `snigel` drops Publisher Collective. +- It's niche-gated and the niche isn't allowed: Carbon (tech only), EthicalAds (tech, education). +- It's a specialist and the niche isn't one of its strong niches: NitroPay, Venatus, Snack Media. +- It's a main-lane network whose program tier is below the current network's tier (a step down). Mediavine Official is never a step down from Journey or PubNation. + +**Current network tier.** The profile's tier. PubNation and PubGalaxy count as 2, `snigel` as 3. The input never names a program, so a current network with programs counts as its lowest program's tier: Newor Media 1 (Elevate), Setupad 3, Adnimation 3. This is soft on purpose. For Newor it hides only tier 0 networks and never assumes Premier from large traffic. `other`, `none`, and blank have no tier. + +Language, platform, and own-GAM rules aren't filters, because the tool doesn't ask. They appear in the network's detail as "Also needs". + +## Step 4. Score each remaining network + +### Routes and requirements + +Each network has **scale routes** and **requirements**. + +- **Routes are alternatives.** Clearing any one route is enough. A route is official (`hard`, `soft`) or editorial (`editorial`, `editorial_gate`), as the priors table shows. When a network has two editorial routes, that's our own judgment of two ways a site can show scale, not an official "or". Only routes marked official in the table are official alternatives. +- **Requirements are mandatory.** Every requirement must be met: geography gates, niche gates, and Publisher Collective's 3,000,000 pageviews outside its core genres. A route can never get around a requirement. + +### Scale fit `S` + +For each route, with the person's interval `[lo, hi]`, floor `F`, and comfortable level `C`: + +| Condition | `S` | +| --- | --- | +| Kind `none` (official no minimum) | 1.0 | +| Kind `pref` (no minimum, editorial comfortable level) | 0.5 + 0.5 × min(1, lo ÷ C). Unknown: 0.5. | +| lo ≥ C | 1.0 | +| lo ≥ F | 0.85 + 0.15 × (lo − F) ÷ (C − F) | +| hi ≥ F | 0.6 | +| hi ≥ 0.7 × F | 0.35 | +| Otherwise | 0.1 | + +When a traffic measure can't be built at all: `S` is 0.5 if F ≤ 10,000, 0.35 if F ≤ 50,000, 0.2 if F ≤ 250,000, else 0.05. + +**Route gate.** + +| Kind | Passes when | +| --- | --- | +| `hard`, `editorial_gate` | hi ≥ F, or the traffic measure is unknown | +| `soft` | Main lane: hi ≥ 0.5 × F, or unknown. Other lanes: always. | +| `editorial`, `none`, `pref` | Always | +| Any revenue route with revenue blank | Neither passes nor fails | + +- At least one route passes: the network goes on. `S` is the highest `S` among passing routes (ties: official first). That route is the deciding route. +- No route passes and at least one fails: the network fails its scale gate. +- No route passes or fails (only revenue routes, revenue blank): hidden. Not a growth target. + +`editorial_gate` is Mediavine's run-rate heuristic. It's a ranking heuristic, not a requirement. A gated Mediavine becomes a growth target that shows Mediavine's own published bar. + +**SHE Media case-by-case.** When its pageview route fails, pageviews lo ≥ 25,000, and the niche is strong, the route passes with `S` 0.5 and basis `review_led`. + +**Starter decay.** AdSense's `S` is multiplied by 1.0 under 25,000 pageviews, 0.75 under 100,000, 0.45 under 500,000, and 0.3 above. Blank pageviews count as under 25,000. + +### Geography `G` + +Share requirements use one rule. With the aggregate interval `[lo, hi]` and threshold `X`: + +| Case | `G` | +| --- | --- | +| `noCountryInput` | 0.6 | +| lo ≥ X | 1.0 | +| lo < X ≤ hi (straddles) | 0.7 | +| hi < X | Requirement fails | + +| Network | Aggregate and threshold | +| --- | --- | +| Raptive | Tier 1 ≥ 50 when pageviews lo < 100,000, ≥ 40 from 100,000 | +| Freestar | Tier 1 ≥ 50 | +| Monumetric | Monumetric share ≥ 50 | +| SHE Media | US share ≥ 30 | + +Leaning networks have no requirement: + +| Leaning | `G` | +| --- | --- | +| Tier 1 (Journey, Mediavine, Carbon, EthicalAds, Playwire, Publift, Media.net) | clamp(Tier 1 lo ÷ 60, 0.3, 1.0). `noCountryInput`: 0.8. | +| Region (AnyMind, Geniee, Refinery89, Opti Digital) | 0.75, because the tool doesn't ask region | +| None | 1.0 | + +### Site age `Aage` + +Soft for every network. A band can't prove a domain's age, and Monumetric's 3 months in a row can't be known from one month. + +| Rule | Band at or over | Band straddles | Band under | Blank | +| --- | --- | --- | --- | --- | +| Raptive 6, SHE Media 3, Journey 4, Monumetric 3 (months) | 1.0 | 0.85 | 0.5 | 0.8 | + +Bands: `lt3m` 0 to 3, `3to6m` 3 to 6, `6to12m` 6 to 12, `gt12m` 12 and up. A band under the rule makes the network unlikely to make the list, but it's never a gate. Networks with an age rule never get the `published_number` basis. + +### Scale tier match `TM` + +`ut` comes from pageviews lo and monthly revenue, whichever gives the higher tier: + +| `ut` | Pageviews lo | Or revenue a month | +| --- | --- | --- | +| 0 | under 10,000 | | +| 1 | 10,000 | | +| 2 | 50,000 | $500 | +| 3 | 250,000 | $3,000 | +| 4 | 2,000,000 | $15,000 | + +Pageviews here can be estimated from visits. With pageviews and revenue both unknown, `ut` is unknown. + +Main lane: `diff` = program tier − `ut`. 0 → 1.0, −1 → 0.85, +1 → 0.75, −2 or less → 0.55, +2 or more → 0.4. Other lanes and unknown `ut`: 0.8. + +### Current network `Cc` + +Main lane only. No current tier: 0.8. Program tier above the current tier: 1.0. Same tier: 0.7. Mediavine Official from Journey or PubNation: 1.0, flagged as an upgrade. Other lanes: 0.8. + +### Peers `P` + +Confirmed sites in the same niche using the network. `P` = min(1, count ÷ 20) when the count is at least 5. Under 5, `P` is left out and its weight shared out. The [expected rankings](#expected-rankings) use no peers. + +### Access, evidence, niche + +| Access | `A` | Evidence | `E` | Niche | `Nmult` | +| --- | --- | --- | --- | --- | --- | +| Open signup | 1.0 | High | 1.0 | Strong | 1.0 | +| Application form | 0.95 | Medium | 0.9 | Neutral | 0.92 | +| Contact or sales-led | 0.8 | Low | 0.75 | Weak | 0.75 | +| Invite only | 0.6 | | | | | + +`Aeff` = 1 − (1 − A) × max(0, (3 − ut) ÷ 3). With `ut` unknown, `Aeff` = `A`. Niche `other` is neutral, except for niche-gated networks and specialists, which it drops. + +### The score + +``` +base = weighted average of S (0.40), TM (0.20), G (0.20), Cc (0.10), P (0.10, only when present) +score = 100 × base × E × Aeff × Aage × Nmult +``` + +When `E` is low and `S` < 0.85, the score is capped at 40. + +### Basis and rank + +| Basis | When, in order | +| --- | --- | +| `review_led` | SHE Media's case-by-case path. The Moneytizer always (when not hidden). | +| `no_minimum` | Deciding route `none` or `pref`. Newor Elevate with `S` ≥ 0.6. | +| `review_led` | Deciding route `editorial`, or Newor Elevate, with `S` ≥ 0.35 | +| hidden | `S` < 0.35 | +| `review_led` | `S` < 0.6 | +| `published_number` | Deciding route `hard`, `S` ≥ 0.85, the route's measure exact, every requirement's aggregate exact, and no age rule | +| `estimate` | Everything else (`hard`, `soft`, `editorial_gate`) | + +Rank = score + 6 (`published_number`), 3 (`estimate`), 0 (`no_minimum`), −6 (`review_led`), + 8 for an upgrade, + 5 for a specialist. + +## Step 5. Public status + +| Status | When | +| --- | --- | +| `good_fit` | Basis isn't `review_led`, and score ≥ 70 | +| `worth_a_try` | Any other shortlisted network | +| `growth_target` | Failed its scale gate or a requirement. Shown only in the closed section. | + +## Step 6. Build the result + +### Main list + +1. Candidates: main lane, plus own-setup networks with `S` ≥ 0.85 when the site is large (pageviews lo ≥ 1,000,000 or revenue ≥ $5,000). +2. Keep scores ≥ 45. +3. Sort by rank, then higher `E`, higher `A`, slug. +4. One card per family. Mediavine family: the first of Journey and Mediavine Official in rank order. +5. Take up to 5. +6. AdSense pin: when `current` is `none` or blank and pageviews lo is under 25,000 (or unknown), AdSense is in the list if its score is at least 45. If it isn't in the top 5, it replaces the fifth. + +### Closed section: "More options" + +At most 6 rows. + +- **Add alongside:** supplemental lane, score ≥ 45, up to 2, in rank order. At most one native widget (MGID, Revcontent, Taboola). None when the current network is Carbon. When the current network is exclusive (Raptive, Mediavine, SHE Media, Newor, Playwire, Freestar), each row's reason is `check_contract`. +- **Runs on your own ad setup:** own-setup networks not in the main list, score ≥ 50, up to 2, only when the site is large. +- **Growth targets:** see below. + +### Growth targets + +Main-lane networks that passed the filters but failed a scale gate or a requirement. + +**Closeness.** Each failed item gets a ratio: the person's hi ÷ the bar, capped at 1. A failed scale gate uses the best ratio among its failing routes, so an "or" counts the closer route. A network's closeness is the product of the ratios of everything it failed. Two failures multiply, so a network that fails twice ranks behind one that fails once by the same margin. + +Count each distinct predicate once. After selecting the closest failed route, combine it with failed mandatory requirements and deduplicate by metric, comparator, threshold, currency, period, and country or niche scope. A program or route label alone doesn't create another predicate. Publisher Collective's 3M pageview route and its mandatory 3M rule outside core genres are the same predicate: scenario 6 contributes `600,000 / 3,000,000 = 0.20` once, not `0.20 × 0.20`. + +**Selection.** Closeness at least 0.2. Sort by closeness, then lower program tier, higher `E`, slug. Take 2. + +The row shows the network's published bar in its own words, with its currency and period, such as "25,000 pageviews a month", "$5,000 ad revenue in the previous calendar year", or "3,000,000 pageviews a month outside its core genres". Never "you have", never a gap. + +### Lead + +| Result | Lead | +| --- | --- | +| Main list has cards | `Apply to first`, and the count | +| Main empty, growth targets exist | `Grow toward next` | +| Main and growth empty, current network set | `No clear step up from right now`. More options shows any add-alongside or own-setup rows. | +| Main and growth empty, no current network | `No network stands out for these numbers yet` | + +The lead never asks for more input and never says "can't tell". The suggestion line below follows its own rules. + +### One input that would help most + +At most one line, first match wins: + +1. `adRevenueMonth`, when blank and pageviews lo ≥ 20,000 or pageviews unknown. +2. `tier1Share`, when it and every split are blank. +3. `siteAge`, when blank. +4. `pageviews`, when only visits were given. + +## Network priors + +All 44 profiles. Tier: 0 starter, 1 entry managed, 2 mid managed, 3 premium managed, 4 enterprise. Lane: main (replaces your ads), add (adds alongside), setup (runs on your own ad setup). + +Route kinds: `hard` and `soft` are official. `editorial` and `editorial_gate` are ours. `none` is an official no minimum. `pref` is an official no minimum with an editorial comfortable level. Several routes in one cell are alternatives. "Official or" means the network itself publishes the alternative. + +Lifestyle niches (`L`): food, travel, lifestyle, parenting, personal-finance, home-diy, crafts, health-fitness, beauty-fashion, gardening, pets, outdoors, education. + +| Network | Lane | Tier | Access | E | Scale routes: unit F → C (kind) | Requirements | Strong niches | Weak niches | Geography | Detail notes | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| Google AdSense | main | 0 | open | high | pageviews 0 (none) | | all neutral | | none | Starter decay, pin rule | +| Journey by Mediavine | main | 1 | form | medium | Tier 1 sessions 1,000 → 5,000 (hard) | | L | news | Tier 1 leaning | Age 4 months from dated 2024 guidance. Grow for 30 days. | +| Monumetric | main | 1 | form | high | pageviews 10,000 → 20,000 (hard) | Monumetric share ≥ 50 | personal-finance, food, travel, lifestyle, home-diy, parenting, crafts, health-fitness | | requirement | Age 3 months (history). Also needs: English, WordPress or Blogger for Propel, $99 setup. | +| Newor Media | main | by program | form | medium | Elevate: pageviews 10,000 → 40,000 (editorial). Catapult: US pageviews 60,000 → 420,000 (hard). Premier: US pageviews 420,000 → 420,000 (hard). | | | | none | Also needs: English, exclusive, Elevate own GAM | +| Carbon Ads | main | 1 | form (0.9) | medium | pageviews 20,000 → 100,000 (editorial) | Niche tech | tech | | Tier 1 leaning | Invite review. Runs alone site-wide. Also needs: English. | +| PubFuture | main | 1 | open | medium | pageviews 100,000 → 200,000 (hard, official FAQ) | | gaming | all except gaming, entertainment, education | none | Content safe for ads, ads.txt. Net 30. | +| PubPower | main | 1 | form | low | visitors 100,000 → 200,000 (soft, dated help page) | | entertainment, gaming | | none | | +| Raptive | main | 2 | form | high | pageviews 25,000 → 50,000 (hard) | Tier 1 ≥ 50 or ≥ 40 by size | food, lifestyle, home-diy, parenting, travel, crafts, personal-finance, health-fitness, beauty-fashion, gardening, pets | | requirement | Domain 6 months | +| Mediavine Official | main | 2 | form | high | revenue $420 → $700 a month (`editorial_gate`) | | L | news | Tier 1 leaning | The run rate only ranks. Mediavine's own bar, shown in detail and growth targets: $5,000 of the site's ad revenue in the previous calendar year. No claim about the site's past earnings. | +| SHE Media | main | 2 | form | high | pageviews 50,000 → 100,000 (hard) | US share ≥ 30 | lifestyle, food, parenting, home-diy, beauty-fashion, health-fitness, crafts, travel | gaming, tech, automotive, sports, news, business | requirement | Live 90 days. Case-by-case path. Also needs: not Wix, GA access. | +| Ezoic | main | 2 | open | high | monthly active users 250,000 → 400,000 (hard) | | tech, news, education | | none | Incubator is real and limited (about 20 sites a month). It isn't ranked; the detail names it under 250,000. | +| Clickio | main | 2 | contact | high | Official or: pageviews 100,000 → 200,000 when Tier 1 lo ≥ 50, else 1,000,000 → 2,000,000 (soft, indicative); revenue more than $500 → $1,000 a month (hard) | | | | in route | Europe and Latin America bars sit between 250k and 750k. The tool uses the rest-of-world bar because it doesn't ask region. | +| The Moneytizer | main | 2 | form | high | organic US/UK/CA uniques 300,000 → 450,000 (hard) | | | | in measure | Always `review_led`. Also needs: own domain, not Wix or Jimdo. | +| NitroPay | main | 2 | form | medium | pageviews 25,000 → 100,000 (editorial) | | gaming, entertainment | | none | Specialist | +| Refinery89 | main | 2 | contact | low | pageviews 100,000 → 500,000 (editorial) | | news, lifestyle | | region leaning | | +| Playwire | main | 3 | form | medium | pageviews 100,000 → 500,000 (soft) | | gaming, education, entertainment, travel | | Tier 1 leaning | 500k is the FAQ requirement, 100k is apply guidance. Replaces AdSense and Ad Exchange tags. | +| Freestar | main | 3 | contact | medium | pageviews 300,000 → 1,000,000 (editorial) | Tier 1 ≥ 50 | sports, news, personal-finance, automotive, gaming, entertainment | | requirement | 300k is our floor. Freestar's own figure is a typical 1M pageviews, shown as guidance. 50% organic can't be checked. | +| Publift | main | 3 | contact | high | Official or: revenue more than $2,000 → $4,000 a month (hard); pageviews 500,000 → 1,000,000 (soft, its secondary signal) | | gaming | | Tier 1 leaning | | +| Publisher Collective | main | 3 | contact | high | Core genres: pageviews 300,000 → 1,000,000 (editorial) or revenue $9,000 → $15,000 a month (editorial scale level). Other niches: pageviews 3,000,000 → 6,000,000 (hard). | Other niches: pageviews ≥ 3,000,000 | tech, gaming, crafts, education, sports, health-fitness | | none | Its own signal, shown as guidance: about €300 a day in revenue. The $9,000 is our scale level, not a converted figure. | +| Snack Media | main | 3 | contact | medium | pageviews 250,000 → 1,000,000 (editorial) | | sports, entertainment | | none | Specialist | +| Venatus | main | 3 | contact | low | pageviews 250,000 → 1,000,000 (editorial) | | gaming, sports, entertainment | | none | Specialist | +| Adnimation | main | 3 | form | low | pageviews 1,000,000 → 3,000,000 (editorial) | | news, automotive | | none | MAP named in detail | +| Concert | main | 4 | invite | low | pageviews 10,000,000 → 30,000,000 (editorial) | | news, entertainment | | none | Curated, invite-led | +| Media.net | main | 0 | form | low | pageviews 50,000 → 250,000 (editorial) | | news, personal-finance, tech | | Tier 1 leaning | Limits similar competing ads | +| Infolinks | add | 0 | open | medium | pageviews 0 (none) | | | | none | | +| Revcontent | add | 0 | form | medium | pageviews 0 (none) | | news, entertainment | | none | Native widget | +| Taboola | add | 0 | form | medium | pageviews 0 → 100,000 (pref) | | news, entertainment, lifestyle | | none | Native widget, exclusive against other widgets | +| MGID | add | 0 | open | high | visitors 90,000 → 180,000 (hard) | | news, entertainment, sports | | none | Native widget. Its other route, 3,000 daily uniques, isn't modeled. 10 current articles. | +| Sovrn | add | 0 | form | high | visits 100,001 → 200,000 (hard) | | | | none | More than 100,000 | +| EthicalAds | add | 0 | form | medium | pageviews 50,000 → 100,000 (hard) | Niche tech or education | tech | | Tier 1 leaning | | +| Teads | add | 4 | contact | low | pageviews 1,000,000 → 5,000,000 (editorial) | | news, education, entertainment | | none | | +| Amazon Publisher Services | setup | 4 | invite | medium | pageviews 1,000,000 → 5,000,000 (editorial) | | news | | none | Also needs own GAM | +| MonetizeMore PubGuru | setup | 3 | contact | high | Official or: revenue $5,000 → $10,000 a month (hard); pageviews 2,000,000 → 4,000,000 (hard) | | food | | none | | +| AdPushup | setup | 3 | form | low | revenue $3,000 → $6,000 a month (editorial, from a vendor article); pageviews 500,000 → 1,000,000 (editorial) | | tech | | none | | +| Adapex | setup | 3 | contact | low | pageviews 500,000 → 2,000,000 (editorial); revenue $3,000 → $10,000 (editorial) | | | | none | Also needs own GAM | +| Aditude | setup | 4 | contact | low | pageviews 1,000,000 → 5,000,000 (editorial); revenue $10,000 → $30,000 (editorial) | | gaming, entertainment | | none | | +| AnyMind AnyManager | setup | 4 | contact | low | pageviews 1,000,000 → 3,000,000 (editorial); revenue $5,000 → $15,000 (editorial) | | news, gaming | | region leaning | | +| Geniee SSP | setup | 4 | form | low | pageviews 1,000,000 → 3,000,000 (editorial) | | news | | region leaning | | +| Opti Digital | setup | 4 | contact | low | pageviews 1,000,000 → 3,000,000 (editorial); revenue $5,000 → $15,000 (editorial) | | | | region leaning | Also needs own GAM | +| Publir | setup | 3 | form | low | pageviews 100,000 → 500,000 (editorial) | | | | none | | +| Setupad | setup | 3 | form | low (Managed), high (Self-Serve) | Managed: visits 100,000 → 500,000 (editorial). Self-Serve: visits 10,000,000 → 50,000,000 (hard). | | | | none | Self-Serve also needs own GAM | +| Sparteo | setup | 4 | contact | low | pageviews 1,000,000 → 3,000,000 (editorial) | | education | | none | | +| PubNation | legacy | | | | | | | | | Never shown. As current network: Mediavine, tier 2. | +| PubGalaxy | legacy | | | | | | | | | Never shown. As current network: tier 2, no family. | + +Revenue floors written "more than $X" use F = X + 0.01. + +Where the editorial levels came from: + +- Carbon 20k, Media.net 50k, NitroPay 25k, Newor Elevate 10k: the lowest scale where reports or positioning show real use. Newor's reported rejections near 10k sessions set its floor. +- Freestar 300k: reports of smaller accepted publishers at 1M to 2M ad impressions, well under its typical 1M pageviews. +- Publisher Collective 300k pageviews or $9,000 a month, Venatus and Snack 250k: selective review, and gaming and sports reports well above 100k. The $9,000 is a scale level we set; it isn't €300 a day converted. +- Refinery89 and Publir 100k: contact-led partners whose intake asks for a pageview band. +- Adapex and AdPushup: "mid-sized" positioning, and AdPushup's vendor-stated $3,000 a month. +- 1M for Aditude, AnyMind, Geniee, Opti Digital, Sparteo, Teads, Amazon Publisher Services, Adnimation: enterprise, invite, or sales-led products with reported cases from 1M to 100M. +- Concert 10M: a curated marketplace for media groups. +- Mediavine $420 to $700 a month: a ranking heuristic near $5,000 ÷ 12. It ranks; it doesn't qualify anyone. + +## Reasons on a card + +The engine returns a reason code and its values. The frontend owns the words: one short line, about 12 words at most. + +| Code | When | Says | +| --- | --- | --- | +| `published_bar` | Basis `published_number` | The bar and the person's own number in that unit: "Asks for 25,000 pageviews; you have 40,000" | +| `estimated_bar` | Basis `estimate`, hard route | The bar, with "about": "Asks for 1,000 Tier 1 sessions; you're likely above" | +| `apply_guidance` | Soft route decides | "Sites usually apply from 100,000 pageviews" | +| `revenue_signal` | Mediavine | "Revenue makes it worth checking; reviews prior calendar-year earnings" | +| `revenue_bar` | A revenue route decides | "Asks for over $2,000 ad revenue a month" | +| `no_minimum` | Basis `no_minimum` | "No traffic minimum; content is reviewed" | +| `case_by_case` | SHE Media's path | "Smaller sites reviewed case by case" | +| `niche_specialist` | Specialist | "Built for gaming sites" | +| `sales_led` | Editorial route, contact or invite access | "Talks to sites your size; no published bar" | +| `upgrade` | Upgrade flag | "Next step from Journey" | +| `check_contract` | Add row under an exclusive current network | "Check your current network's contract first" | +| `fit_estimate` | Any shortlisted card not matched by a more specific reason | "Estimated fit for your site's size; individual review still applies" | + +Use the first applicable reason in this order: `upgrade`, `check_contract`, `niche_specialist`, `revenue_signal`, `case_by_case`, `revenue_bar`, `published_bar`, `estimated_bar`, `apply_guidance`, `no_minimum`, `sales_led`, `fit_estimate`. `revenue_bar` requires a published revenue route; editorial revenue levels never become an "asks for" claim. The fallback guarantees every shortlisted card has a reason, including Carbon in scenario 3 and Newor Elevate in R9. + +## Expected rankings + +All with no peers. Scores and ranks are rounded to 2 decimals. "Next" lists the best networks that missed the main list. + +### 1. Tiny food blog + +Food, 3,000 pageviews, visits blank, 3 to 6 months, Tier 1 60%, current none, revenue blank. + +| # | Network | Status | Score | Rank | Basis | +| --- | --- | --- | --- | --- | --- | +| 1 | Google AdSense | Good fit | 89.96 | 89.96 | no_minimum | +| 2 | Journey by Mediavine | Worth a try | 54.10 | 57.10 | estimate | + +- Add: Infolinks 77.28, Revcontent 73.42. +- Growth: Monumetric 0.30. Raptive (0.12), SHE Media (0.06), and PubFuture (0.03) fall under 0.2. +- Suggestion: none. +- Not shown: Mediavine (revenue blank), Publift, Publisher Collective, every sales-led product. + +### 2. Food blog at 40,000 pageviews (default example) + +Food, 40,000 pageviews, 22,000 sessions, over a year, Tier 1 65%, current AdSense, $350 a month. + +| # | Network | Status | Score | Rank | Basis | +| --- | --- | --- | --- | --- | --- | +| 1 | Monumetric | Good fit | 96.67 | 99.67 | estimate | +| 2 | Raptive | Good fit | 88.72 | 91.72 | estimate | +| 3 | Journey by Mediavine | Good fit | 87.00 | 90.00 | estimate | +| 4 | Newor Media (Elevate) | Good fit | 80.04 | 80.04 | no_minimum | +| 5 | SHE Media | Worth a try | 69.81 | 63.81 | review_led | + +- Add: Infolinks 77.28, Revcontent 74.70. +- Growth: Mediavine 0.8333 ($350 ÷ $420.00), Clickio 0.70 (its revenue route, $350 ÷ $500.01, beats its pageview route at 0.40). PubFuture 0.40 is third. Ezoic 0.0792 is under 0.2. +- Suggestion: none. + +### 3. Developer and design site + +Tech, 60,000 pageviews, 35,000 sessions, over a year, Tier 1 55%, current none. + +| # | Network | Status | Score | Rank | Basis | +| --- | --- | --- | --- | --- | --- | +| 1 | Raptive | Good fit | 88.46 | 91.46 | estimate | +| 2 | Monumetric | Good fit | 85.44 | 88.44 | estimate | +| 3 | Journey by Mediavine | Good fit | 75.39 | 78.39 | estimate | +| 4 | Newor Media (Elevate) | Good fit | 76.90 | 76.90 | no_minimum | +| 5 | Carbon Ads | Worth a try | 77.66 | 71.66 | review_led | + +- Add: EthicalAds 76.24, Infolinks 77.28. +- Growth: PubFuture 0.60, PubPower 0.315. +- Next: SHE Media 68.20 / 71.20 (weak niche), AdSense 70.53 (not pinned above 25,000 pageviews). +- Suggestion: monthly ad revenue. + +### 4. Gaming site + +Gaming, 300,000 pageviews, 150,000 sessions, over a year, Tier 1 45%, current AdSense, $900 a month. + +| # | Network | Status | Score | Rank | Basis | +| --- | --- | --- | --- | --- | --- | +| 1 | Clickio | Good fit | 87.71 | 93.71 | published_number (revenue route) | +| 2 | Raptive | Good fit | 88.93 | 91.93 | estimate | +| 3 | Publisher Collective | Worth a try | 93.33 | 87.33 | review_led | +| 4 | PubFuture | Good fit | 81.00 | 87.00 | published_number | +| 5 | Mediavine Official | Good fit | 83.82 | 86.82 | estimate | + +- Add: Sovrn 82.80, MGID 79.73. +- Growth: Monumetric 0.90 (share [42, 45] against 50, tier 1), Freestar 0.90 (Tier 1 45 against 50, tier 3). Ezoic 0.54 is third. Publift isn't gated: its revenue route fails, but its soft pageview route passes (300,000 ≥ 0.5 × 500,000). +- Next: NitroPay 87.00 / 86.00, Playwire 82.00 / 85.00, Newor Media (Catapult) 74.70 / 77.70. +- Suggestion: none. + +### 5. High volume, mostly outside Tier 1 + +Education, 2,000,000 pageviews, 1,100,000 sessions, over a year, Tier 1 10%, current AdSense, $2,500 a month. + +| # | Network | Status | Score | Rank | Basis | +| --- | --- | --- | --- | --- | --- | +| 1 | Ezoic | Good fit | 90.00 | 93.00 | estimate | +| 2 | Publisher Collective | Worth a try | 96.67 | 90.67 | review_led | +| 3 | Clickio | Good fit | 82.80 | 88.80 | published_number | +| 4 | MonetizeMore PubGuru | Good fit | 79.73 | 85.73 | published_number | +| 5 | PubFuture | Good fit | 74.52 | 80.52 | published_number | + +- Add: MGID 85.87, Sovrn 85.87. +- Own setup: Amazon Publisher Services 73.14, Sparteo 67.50. +- Growth: The Moneytizer 0.3234, SHE Media 0.30. Raptive is gated (Tier 1 10 against 40) at 0.25, third. +- Next: Publift 74.60 / 77.60, Mediavine 74.40 / 77.40. +- Suggestion: none. + +### 6. High revenue site already on Raptive + +Food, 600,000 pageviews, 330,000 sessions, over a year, Tier 1 80%, US 70%, current Raptive, $12,000 a month. + +| # | Network | Status | Score | Rank | Basis | +| --- | --- | --- | --- | --- | --- | +| 1 | MonetizeMore PubGuru | Good fit | 93.33 | 99.33 | published_number | +| 2 | Publift | Good fit | 92.00 | 98.00 | published_number | +| 3 | Mediavine Official | Good fit | 93.33 | 96.33 | estimate | +| 4 | SHE Media | Good fit | 93.33 | 96.33 | estimate | +| 5 | Clickio | Good fit | 85.87 | 91.87 | published_number | + +Mediavine and SHE Media tie on rank and `E`. `A` ties too, so slug order puts Mediavine first. + +- Add: MGID, Sovrn (85.87 each), both with `check_contract`. +- Own setup: AdPushup 64.40, Publir 64.40. +- Growth: The Moneytizer 0.7762, Publisher Collective 0.20 (food is outside its core genres: 600,000 ÷ 3,000,000. Its revenue route can't get around that requirement). +- Next: Newor Media (Premier) 82.80 / 88.80 (US pageviews exactly 420,000, chosen before the filter, tier 3), Playwire 82.80 / 85.80, Freestar 79.60 / 73.60. +- Hidden as step-downs: Monumetric, Journey, AdSense. + +### 7. Unknowns: one visits number + +Lifestyle, visits 25,000 (unit visits), everything else blank. + +| # | Network | Status | Score | Rank | Basis | +| --- | --- | --- | --- | --- | --- | +| 1 | Google AdSense | Good fit | 76.67 | 76.67 | no_minimum | +| 2 | Newor Media (Elevate) | Good fit | 76.48 | 76.48 | no_minimum | +| 3 | Monumetric | Worth a try | 68.74 | 71.74 | estimate | +| 4 | Raptive | Worth a try | 60.32 | 63.32 | estimate | +| 5 | Journey by Mediavine | Worth a try | 52.59 | 55.59 | estimate | + +- Add: Infolinks 77.28, Revcontent 74.70. +- Growth: PubFuture 0.50, PubPower 0.225. +- Mediavine is hidden: its only route is revenue, and revenue is blank. +- Suggestion: monthly ad revenue. + +### 8. On Journey + +Food, 120,000 pageviews, 70,000 sessions, over a year, Tier 1 70%, current Journey, $1,100 a month. + +| # | Network | Status | Score | Rank | Basis | +| --- | --- | --- | --- | --- | --- | +| 1 | Mediavine Official | Good fit | 98.33 | 109.33 | estimate, upgrade | +| 2 | Raptive | Good fit | 98.33 | 101.33 | estimate | +| 3 | SHE Media | Good fit | 98.33 | 101.33 | estimate | +| 4 | Monumetric | Good fit | 91.78 | 94.78 | estimate | +| 5 | Clickio | Good fit | 85.87 | 91.87 | published_number | + +- Add: Infolinks 77.28, Revcontent 75.99. +- Growth: Publift 0.55, Ezoic 0.252. +- Next: Newor Media (Elevate) 76.00, Playwire 71.70 / 74.70. + +### 9. Dev site on Carbon + +Tech, 150,000 pageviews, 90,000 sessions, over a year, Tier 1 50%, current Carbon. + +| # | Network | Status | Score | Rank | Basis | +| --- | --- | --- | --- | --- | --- | +| 1 | Raptive | Good fit | 90.47 | 93.47 | estimate | +| 2 | Clickio | Good fit | 83.00 | 86.00 | estimate (soft pageview route) | +| 3 | Monumetric | Good fit | 78.40 | 81.40 | estimate (share [47, 50] straddles 50, `G` 0.7) | +| 4 | Newor Media (Elevate) | Good fit | 75.99 | 75.99 | no_minimum | +| 5 | Journey by Mediavine | Good fit | 72.98 | 75.98 | estimate | + +- US pageviews are [41,250, 67,500], so the low end misses 60,000 and Newor picks Elevate. +- Add: none. Carbon needs its ads to run alone, so EthicalAds isn't offered. +- Growth: Ezoic 0.324, Publift 0.30. +- Suggestion: monthly ad revenue. + +### Regression cases + +| Case | Inputs | Expected | +| --- | --- | --- | +| R1 partial split | Lifestyle, 80,000 pageviews, over a year, Tier 1 60, UK 50, current none | US [0, 10]. SHE Media growth target, 0.3333. Main: Raptive 96.15, Monumetric 92.87 (share [57, 60]), Journey 83.58, Newor Elevate 76.90, AdSense 70.53. Growth: PubFuture 0.80, SHE Media 0.3333. | +| R2 Moneytizer zeros | Lifestyle, 1,000,000 users, over a year, US 0, UK 0, CA 0, AU 50, NZ 50, current none | Tier 1 100. Moneytizer share [0, 0], uniques [0, 0]: gated at closeness 0, so not a growth target. Main: Raptive, Publift (soft pageview route), Monumetric, Ezoic, Clickio. Own setup: PubGuru, Amazon Publisher Services. | +| R3 Newor straddle | Sports, 100,000 pageviews, over a year, Tier 1 70, current none | US pageviews [38,500, 63,000]. Newor picks Elevate (76.90). | +| R4 Newor Catapult | Same with US 62 | US pageviews 62,000, exact. Newor picks Catapult: `S` 0.85 + 0.15 × 2,000 ÷ 360,000 = 0.8508, `published_number`, score 74.21, rank 80.21. | +| R5 current Concert | News, 20,000 pageviews, over a year, Tier 1 50, current Concert | Every main-lane network is below tier 4. Main and growth are empty. Lead: `No clear step up from Concert right now`. Add: Revcontent, Infolinks. Suggestion: monthly ad revenue. | +| R6 current Newor (program unknown) | Food, 150,000 pageviews, over a year, Tier 1 70, current Newor, $900 | Current tier 1. Only tier 0 is hidden: AdSense goes, Journey stays (score 82.60, rank 85.60, just outside). Main: Mediavine, Raptive, SHE Media, Monumetric, Clickio. | +| R7 young band | Food, 40,000 pageviews, 3 to 6 months, Tier 1 60, current none | Raptive `Aage` 0.5: score 43.29, rank 46.29. Under 45, so not shortlisted and not a growth target. Main: Monumetric, Newor Elevate, AdSense, Journey (`Aage` 0.85), SHE Media. | +| R8 complete split | Food, 40,000 pageviews, over a year, Tier 1 55.4, US 40, UK 8, CA 4, AU 3, NZ 0, current none | Tier 1 normalized to 55. Monumetric share 55, exact. | +| R9 niche only | Food | `ut` unknown. Main: AdSense 85.87, Newor Elevate 55.94, Monumetric 47.29, Journey 45.60, the last three Worth a try. Suggestion: monthly ad revenue. | +| R10 split mismatch | Five splits adding up to 55, Tier 1 65 | `split_mismatch` on `shareUS`. The last good result stays. | +| R11 small traffic, real revenue | Personal finance, 8,000 pageviews, over a year, Tier 1 70, current none, $6,000 a month | `ut` 3 from revenue. Main: Mediavine 94.44 / 97.44 (estimate), Publift 89.96 / 95.96, Clickio 86.89 / 92.89, MonetizeMore PubGuru 80.96 / 86.96 (all `published_number` on revenue), AdSense 80.76 (pinned under 25,000 pageviews). Own setup: AdPushup 64.40, Adapex 61.77. Growth: Monumetric 0.80, Raptive 0.32. With current AdSense, AdSense leaves. Journey has Tier 1 sessions [2,800, 4,666.67], `S` 0.9175, score 77.70 and rank 80.70, but the family rule removes it because Mediavine Official is already first. AdPushup therefore takes fifth (score 64.40, rank 58.40, Worth a try); Adapex remains in own-setup options. | + +## Calibration checks + +Any change to priors or weights must keep these true: + +- A site under 10,000 pageviews, with revenue blank or under $500 a month, never sees a tier 3 or 4 network, or any low-evidence network, in the main list. Real revenue opens revenue routes at any traffic level (see R11). +- No main list shows two Mediavine family cards. +- No public text says approved, eligible, qualifies, or meets. +- A network below the current network's tier never shows. +- With revenue blank, Mediavine doesn't show. +- Specialists never show outside their niches. +- A route never bypasses a requirement. +- An entered country share of 0 is never estimated upward. +- The closed section never holds more than 6 rows. diff --git a/content_docs/ad-network-requirements-checker/research.md b/content_docs/ad-network-requirements-checker/research.md new file mode 100644 index 00000000..dd92713c --- /dev/null +++ b/content_docs/ad-network-requirements-checker/research.md @@ -0,0 +1,234 @@ +# Research: Ad network requirements checker + +Route: /ad-network-requirements-checker +Checked: 2026-10-23 +Evidence base: 44 network profiles in [recommendation-profiles-a.json](../ad-networks/recommendation-profiles-a.json) and [recommendation-profiles-b.json](../ad-networks/recommendation-profiles-b.json), with one research note per network in [../ad-networks/research/](../ad-networks/research/) +Competitors used: 6 + +This file replaces the earlier strict-checker research. The owner rejected a tool that graded every network against every published rule and returned mostly "can't tell". The job now is a short, estimated list of where to apply, built from published rules, reported outcomes, and clearly marked editorial judgment. The scoring model is in [recommendation-model.md](recommendation-model.md). The product contract is in [tool-spec.md](tool-spec.md). + +## Who uses it + +| Group | Rough share | What they know offhand | Their questions, in their words | +| --- | --- | --- | --- | +| Solo bloggers and small site owners | Most | Niche, one monthly traffic number, rough site age, maybe AdSense earnings | "What can I use at 8k traffic?" "Can I join Mediavine at 40k pageviews?" "Is Journey easier than Raptive?" | +| Growing publishers ready to switch | Some | Pageviews and sessions from GA4, Tier 1 share, current network and monthly ad revenue | "I'm on Journey, what's next?" "Raptive or Mediavine at 120k?" "Is Playwire worth it at 300k for a gaming site?" | +| Larger operators | Few | Country split, own Google Ad Manager, revenue by month | "Which managed partners take a 2M pageview site with mostly Asian traffic?" "Who can run header bidding on my own GAM?" | + +What they want is a decision: where to apply first, what fits after that, and what to grow toward. They don't want 44 rows of checks. They accept an estimate if it's honest about being one. + +What they can't easily supply: unique organic visitors by country for a 30-day window, the previous calendar year's ad revenue for one site, invalid traffic rates, or three months of pageview history. Networks ask for these during review. The tool shouldn't make people dig them up before they get a useful answer. + +Forum examples that show the real question: + +- [8k monthly traffic, 60% Tier 1, waiting on Journey](https://www.reddit.com/r/Blogging/comments/1r8psq0/best-ad-network-for-small-publishers-8k-traffic/): replies mix sessions and pageviews, and repeat Ezoic's old "no minimum". +- [33k-pageview game site after an AdSense rejection](https://www.reddit.com/r/adops/comments/1wlchl3/adsense-alternatives-for-a-game-website-with-33k/): niche and site type decide more than raw traffic. +- [Journey vs Raptive in 2026](https://www.reddit.com/r/Blogging/comments/1rta0d1/journeymediavine_vs_raptive_2026/): people compare upgrade paths, not single rules. + +## Search intent + +| Query | What the searcher wants | What current results miss | +| --- | --- | --- | +| ad networks for small sites / 8k traffic | A short list they can apply to now | "Traffic" is vague, and old no-minimum claims (Ezoic) keep circulating. | +| can I join Mediavine at 40k pageviews | A yes, a no, or the next step | Mediavine Official counts last calendar year's ad revenue, and Journey is a separate path with its own bar. | +| Raptive vs Mediavine requirements | Which one to apply to first | Pages still list Raptive at 100k and Mediavine at 50k sessions. | +| best ad network for gaming / tech / food site | Niche fit | Most lists are written for lifestyle blogs. | +| what's after Journey / AdSense alternatives | An upgrade path from where they are | Lists ignore the network the reader already uses. | +| ad network requirements checker | A quick tool | The two live tools cover few networks or use stale rules. | + +### Search words + +Checked 2026-10-22 for "ad network requirements checker", re-read 2026-10-23. + +- Main phrase: ad network requirements checker. Close variants: "ad network qualification checker", "which ad network should I join". +- Words top titles add: free, requirements, 2026, best, small sites, and brand names (Mediavine, Raptive, Ezoic, Journey). +- Questions: traffic minimums for the main networks, which networks take small sites, how many sessions Mediavine needs, whether Raptive counts pageviews or sessions, whether Journey is easier than Mediavine. +- The gap: titles promise current requirements and deliver old numbers, mix sessions and pageviews, skip geography, and never say what to do next. + +## User problems + +| Problem | Evidence | What it means for the tool | +| --- | --- | --- | +| People know one number and aren't sure what it measures | 8k thread above | Take pageviews and visits or sessions separately, let either be blank, and estimate the other with a stated range. | +| Old thresholds get repeated | Ezoic "no minimum" in replies, Raptive 100k in 2025 roundups | Use current official facts with check dates. | +| Meeting a number doesn't mean approval | [AdPushup's own list](https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/) warns of rejections; Newor rejected sites already on AdSense and Journey | Use fit words such as "Good fit" and "Worth a try", never "approved" or "eligible". | +| The current network shapes the next move | Journey to Mediavine, AdSense to Journey or Monumetric, Raptive to premium networks | Use the current network for upgrade paths, step-down filtering, and conflicts. | +| Niche decides more than traffic for some networks | Gaming sites go to NitroPay, Playwire, Venatus; dev sites to Carbon and EthicalAds | Niche is a ranking factor and, for specialists, a filter. | + +## What the evidence covers + +44 profiles, all checked 2026-10-22 or 2026-10-23. Each has official requirements as structured rules, reported publisher outcomes, an editorial inference with a confidence level, and the sources behind each claim. + +| Measure | Count | +| --- | --- | +| Profiles | 44: 42 current tracked brands and 2 legacy brands (PubNation, PubGalaxy) | +| Research roles | 20 primary, 13 infrastructure, 8 supplemental, 3 sales collectives | +| Researcher confidence | 16 high, 12 medium, 16 low | +| Reported publisher outcomes | 51, of which 32 state a traffic figure | +| Sources | About 230, mostly official pages, then publisher forums and firsthand posts, then vendor case studies | + +"42 current tracked brands" doesn't mean 42 open doors. Several are invite-only, curated, or sales-led (Carbon, Amazon Publisher Services, Concert), so don't write that 42 networks accept new publishers. + +Snigel has a research note but no profile. It merged into Publisher Collective in February 2025, and the directory lists the combined company. The tool treats "Snigel" as a current-network alias for Publisher Collective. + +## Published bars and practical fit, by network + +"Published" means the network's own page states it. "Reported" means publisher posts or vendor cases. "Editorial" means our judgment from positioning, products, and reports, used only to rank. Editorial numbers never show as a requirement. The exact priors the model uses are in [recommendation-model.md](recommendation-model.md#network-priors). + +### Open or entry-level + +| Network | Published bar | Practical fit and notes | Confidence | +| --- | --- | --- | --- | +| Google AdSense | No traffic or age number in the eligibility checklist. Applicant 18+, supported country, original policy-compliant content. | The default first step for new and small sites. Reports show very young sites rejected, so content depth matters more than traffic. Less useful once a site qualifies for managed networks. | High | +| Journey by Mediavine | At least 1,000 sessions from Journey's Tier 1 countries in 30 days. Grow must run 30 days. Good Google standing. | The clearest entry managed path for lifestyle-type content. Reports: accepted near 15k sessions and at 70k sessions, one in review at 4.4k. The four-month domain history comes from a getting-started guide dated 2024-04-15, so it's dated guidance, not a confirmed current gate. | Medium | +| Monumetric | Propel: 10,000 pageviews a month for 3 months in a row, at least 50% from the US, UK, Canada, or Australia, English. WordPress or Blogger, six ad slots, $99 setup fee. | Real small-blog option from 10k to 80k pageviews. Higher tiers above that. A reported personal finance blog hit 10k in month four and applied at month twelve. | High | +| Newor Media | Elevate: no published pageview number, manual review, English, own GAM, two ad units a page, exclusive. Catapult: 60,000 US pageviews a month. Premier: 420,000 US pageviews a month. | Elevate is the lowest managed door that isn't Journey, but reviewed by hand: 2026 posts show rejections around 10k sessions despite AdSense and Journey approval, and an acceptance at 40k to 60k visitors. A 2025 blog's no-floor and Tier 1 wording for non-English sites conflicts with the current FAQ. Use the current FAQ. | Medium | +| Ezoic | New sites need 250,000 monthly active users. Incubator takes a limited number of smaller sites (about 20 a month). Grandfathered sites only if they ran Ezoic before 2026-02-19 without a gap. | A realistic option near or above 250k MAU. Incubator is a real but limited route, so it's named in the detail rather than ranked by default. | High | +| Infolinks | No minimum. Every site reviewed. A 2015 agreement has a 24-month prior-termination clause the current help page doesn't repeat. | Low-bar extra income beside display ads, not a main network. | Medium | +| Revcontent | No traffic minimum. Human review of each account and domain. | Native widget test for a small site. Not a display replacement. | Medium | +| PubFuture | Official FAQ: at least 100,000 pageviews a month, content safe for ads (no nudity), ads.txt lines. Net 30. | Primary option at 100k pageviews, with the clearest fit for H5 and gaming sites. Evidence for general blogs is thin. The H5 case study is no longer the basis for the number; the FAQ is. | Medium | + +### Mid-size managed networks + +| Network | Published bar | Practical fit and notes | Confidence | +| --- | --- | --- | --- | +| Raptive | 25,000 pageviews a month. At 25k to 99,999 pageviews, at least 50% from the US, UK, Canada, New Zealand, Australia. At 100k and up, 40%. Domain at least 6 months old. Updated 2026-09-26. | The most common next step for lifestyle content once a site clears these numbers. A reported gaming site was accepted at 25k views, six months after launch. | High | +| Mediavine Official | At least $5,000 of the site's ad revenue in the previous calendar year. Traffic source and location are reviewed, with no fixed share. | The tool only knows this month's revenue, which says nothing exact about last calendar year. Use it as a run-rate fit signal and tell people Mediavine reviews prior calendar-year earnings. Journey is the separate lower path. | High | +| SHE Media | 50,000 pageviews a month, at least 30% US, live at least 90 days. Wix sites ineligible. GA access for review. Smaller sites case by case. | Strong for women-focused lifestyle, food, parenting, DIY. Below 50k it's a case-by-case ask for strong niches, not a pass. | High | +| Clickio | Indicative monthly pageviews by audience: 100k for the US, UK, Canada, Australia, France; 250k Italy, Spain; 300k rest of Europe; 500k Portugal; 750k Brazil, Colombia, Mexico; 1M elsewhere. Or more than $500 ad revenue a month, which may need 3 months of proof. | One of the few published paths for European and non-Tier 1 traffic. The revenue route opens it to smaller sites with real earnings. | High | +| The Moneytizer | At least 300,000 unique visitors from organic traffic in the 30 days before registration, from the US, UK, and Canada (US criteria page). Own domain, server access, enough content. Wix and Jimdo excluded. | The measure can't be read from pageviews or sessions. The tool estimates a range from scale and Tier 1 share, and at most suggests it's worth a try. | High (rule), low (estimate) | +| Refinery89 | No published number. Intake form asks pageview band and country. €250 payout floor is not an entry rule. | Contact-led managed partner, stronger in Europe and local news or lifestyle. | Low | +| NitroPay | Manual review of traffic amount, geography, and content. No published number. | Gaming has the clearest fit (a 600k-pageview gaming download site reported serving with it). Editorial prior only. | Medium | +| PubPower | Help page last updated about three years ago says around 100,000 visitors a month. | Dated guidance. Anime and entertainment reports. Worth asking near that scale. | Low | + +### Premium managed and sales collectives + +| Network | Published bar | Practical fit and notes | Confidence | +| --- | --- | --- | --- | +| Playwire | FAQ: 500,000 monthly website pageviews (or 1,000 app DAU). Qualification page: publishers typically apply from 100,000 pageviews for full ROI. IVT at most 7%. 20% US tied to higher revenue, not a gate. | Two official numbers for two purposes. 500k is the stated requirement. 100k to 500k is a reasonable conversation, not a pass. The FAQ says its script can't run alongside AdSense or Ad Exchange tags. That doesn't establish a ban on every other provider, so the model treats it as a replacement, not a blanket conflict. | Medium | +| Freestar | At least 50% traffic from the US, UK, Canada, New Zealand, Australia. At least 50% organic. Typical publisher averages 1M pageviews a month, which is not a minimum. | Our editorial floor is 300k pageviews, kept apart from Freestar's typical 1M. It fits from there when both 50% checks pass. Reports include smaller publishers at 1M to 2M ad impressions. | Medium | +| Publift | More than $2,000 ad revenue a month is the main measure. 500,000 pageviews is a secondary signal. Fast-growing smaller sites can ask. Checked 2026-10-08 article. | Revenue-led. A gaming site at 1.4M pageviews reported a Publift forecast. | High | +| Publisher Collective | Core genres (tech, gaming, hobbies, education, sports, health) reviewed individually. Other niches need at least 3M pageviews. About €300 a day revenue is a flexible signal. | Selective and hands-on. Good fit for core-genre sites with meaningful scale. Includes Snigel since 2025. | High | +| Snack Media | No general traffic minimum. 1M impressions applies to the referral program only. | Sports and sports communities. Sales-led. | Medium | +| Venatus | No published number. Human content audit. | Gaming, sports, entertainment publishers with real scale. | Low | +| Adnimation | Standard service: "substantial traffic". MAP: no pageview minimum, every site reviewed. | A historical interview put its sweet spot at 1M to 20M monthly visitors. MAP is a smaller-site route with thin evidence. | Low | +| Concert | No open application or current publisher requirements. | Curated, invite-led marketplace for established media groups. Not a routine application. | Low | + +### Add alongside your main network + +| Network | Published bar | Practical fit and notes | Confidence | +| --- | --- | --- | --- | +| MGID | 3,000 unique visitors a day or 90,000 visitors a month, plus 10 current articles. | Native widget beside display. Official materials say AdSense can run with it. | High | +| Sovrn | More than 100,000 visits a month (strictly more), content updated in the last 4 months, not child-directed. Commerce is a separate product. | Extra programmatic demand above the visit floor. The coordinator opened the complete official approval page on 2026-10-23 and confirmed these rules. | High | +| EthicalAds | 50,000 pageviews a month for developer-focused sites. Fast-growing close-fit sites may get exceptions. One ad per page. | Developer sites only. Can sit beside other ads on separate pages. | Medium | +| Taboola | No number in the new-account guide. Applicant 18+. Exclusive against other recommendation widgets. | Established content sites. Old 500k to 1M claims are not policy. | Medium | +| Teads | No published number. Sales-led. | Premium editorial or video inventory at scale. | Low | +| Amazon Publisher Services | Invitation only, direct or exclusive representation, Google Ad Manager. | Header-bidding demand for large sites with their own GAM. A 45M US pageview applicant reported no reply after three weeks. | Medium | + +### Runs on your own ad setup + +These are yield and ad-tech services. They help sites that already run Google Ad Manager or have meaningful revenue. They aren't where a small blog starts. + +| Network | Published bar | Practical fit and notes | Confidence | +| --- | --- | --- | --- | +| MonetizeMore PubGuru Premium | $5,000 ad revenue a month or 2,000,000 pageviews a month. Product-specific. | Clear published bar for larger sites. | High | +| Setupad | Self-Serve: 10M visits and up, with Business (10M to 50M) and Enterprise (50M+) plans. Managed: older pages say about 100k visits or sessions, with mixed units. | Self-Serve and managed are separate offers. Never apply the 10M floor to managed. | High (Self-Serve), low (managed) | +| AdPushup | A 2025 vendor article mentions $3,000 a month. Onboarding doesn't confirm it. | Soft signal only. | Low | +| Adapex | No number. Intake asks monthly revenue, pageviews, US share. GAM through MCM. | Mid-sized publishers with an existing stack. | Low | +| Aditude | No number. Demo-led. | Enterprise publishers with ad ops staff. | Low | +| AnyMind AnyManager | No number. Contact-led. | Asia-Pacific web and app publishers. | Low | +| Geniee SSP | No number. Signup form, tags. | Japan and Asia-Pacific media. | Low | +| Media.net | No number. Mostly organic traffic, ads.txt. Agreement limits similar competing ads. | Contextual and managed Prebid. Small-site evidence is thin. | Low | +| Opti Digital | No general number. Referral rules are not entry rules. | GAM publishers wanting managed yield, stronger in Europe. | Low | +| Publir | Pricing lists no traffic limit. No full admission checklist. | Depends on the module needed (subscriptions, adblock recovery, programmatic). | Low | +| Sparteo | No public criteria. | Education and reference publishers with operations needs. | Low | + +### Legacy brands, not recommended + +| Brand | Status | How the tool treats it | +| --- | --- | --- | +| PubNation | Migrated into Mediavine. Mediavine Help Center says migration is complete. | Never recommended. As a current network it means Mediavine. Directory history stays. | +| PubGalaxy | Azerion moved publisher supply into Improve Digital on 2026-09-23. | Never recommended. As a current network it's a legacy managed account. Improve Digital isn't in the directory, so the tool doesn't suggest it. | + +## Conflicts and dated rules + +These are where sources disagree or have aged. The model handles each one; the page doesn't need long disclaimers. + +| Network | Conflict | What the model does | +| --- | --- | --- | +| Playwire | FAQ 500k pageviews vs qualification page 100k "apply for ROI" | 500k ranks as its stated requirement. 100k to 500k ranks lower, as apply guidance. | +| Journey | 1,000 Tier 1 sessions is current. Four months of domain history is from a 2024 guide. | Sessions are the scale rule. Age is a soft factor. | +| Newor | Current FAQ says English for Elevate; a 2025 blog suggests non-English sites with 50% Tier 1 | Current FAQ wins. The tool doesn't ask language, so English shows in Newor's detail as an extra need. | +| Setupad | Self-Serve 10M visits vs older managed ~100k with mixed units | Two programs on one card, picked by scale. Managed uses an editorial prior. | +| Ezoic | Old "no minimum" in forums vs 250k MAU now | 250k MAU ranks. Limited Incubator is named in the detail. | +| Mediavine | Previous calendar year revenue vs the monthly figure people know | Monthly revenue is a run-rate fit signal only. The tool never estimates last year's income. | +| The Moneytizer | Organic unique visitors from 3 countries vs the pageviews people know | Range estimate. Never confirmed. Suggest asking when the high end clears 300k. | +| PubFuture | Earlier research used a case study; the official FAQ states 100k pageviews | FAQ number is the bar. | +| Sovrn, PubFuture pay | Earlier research relied on search snippets | Complete sources were opened on 2026-10-23. Sovrn's visit rule and PubFuture's Net 30 are confirmed; PubFuture's unreconfirmed $50 minimum and payment methods were removed. | +| Publisher Collective | €300 a day is a flexible signal | Shown as guidance in euros, never converted. Ranking uses our own $9,000 a month scale level for core genres. Outside core genres, 3M pageviews is mandatory and no route gets around it. | + +## Peer data: what stack127 can honestly add + +Development data check, 2026-10-23: a read-only grouped query found 619 network–niche cohorts with confirmed sites. Of these, 382 have at least five distinct sites, covering 38 of the 44 tracked networks. Food has usable cohorts for 17 networks, gaming 30, and tech 32. Concert, EthicalAds, Media.net, Publir, SHE Media, and Sovrn have no cohort reaching five in this development snapshot. The model must work without a peer contribution for those cases. These counts describe detected use, not applications or acceptance rates, and the build will load fresh counts. + +Stack127 tracks sites with confirmed network relationships. Each tracked site has a niche and a Chrome popularity group (top 1k, 10k, 100k, 1M, or not ranked) from the monthly CrUX top list ([traffic.mjs](../../scripts/ad-networks/traffic.mjs)). + +- A popularity group is a rank band from Chrome usage. It isn't monthly pageviews, sessions, revenue, or geography. Never convert it. +- "Similar sites" means confirmed sites in the same niche. This version doesn't ask for a site address, so there's no popularity-group match. +- Counts show which networks sites in a niche really use. That's a fair ranking nudge, not proof a site will be accepted. +- Small cohorts mean nothing. Under 5 confirmed sites, the peer signal is left out, not filled in. +- The development coverage check above establishes that peers are available unevenly. Refresh the counts at build time. + +## Competitor reviews + +The two live checkers were tested with a normal case, a boundary case, and a bad input on 2026-10-22. Four static guides were checked against current rules. + +| Competitor | What it does | Where it fails | +| --- | --- | --- | +| [PubSignal checker](https://pubsignal.in/tools/ad-network-requirements-checker) | Pageviews, one Tier 1 share, monthly revenue, domain age. Four networks. Figures dated 2026-09-30. | Treats estimates as exact passes: Journey sessions = pageviews × Tier 1, Mediavine = month × 12 including affiliate income. Only four networks. | +| [Kamal Deen checker](https://kamaldeen.com/tools/ad-network-checker) | Sessions, optional pageviews, language, US share. Broad table. | Rules "as of 2025": Raptive at 100k sessions, Ezoic no minimum. Accepts -100 sessions. | +| [AdPushup small-publisher list](https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/) | 2025 editorial list | Raptive 100k, SHE 20k, Sovrn no minimum: all stale. | +| [This Week in Blogging](https://thisweekinblogging.com/ad-network-entry-requirements/) | Static guide, updated 2025-10-29 | SHE at 20k. Blurs Journey and Mediavine Official. | +| [IMC guide](https://imc.ad/the-complete-guide-to-ad-network-requirements-adsense-mediavine-adthrive-more) | Static vendor guide, 2025-09-05 | Mediavine 50k sessions, Raptive 100k. One Tier 1 share for every network. | +| [Adskeeper guide](https://www.adskeeper.com/blog/for-publishers/best-ad-networks-for-small-publishers/) | Current 2026 guide | Good advice to match units, but no tool and no per-network sources. | + +None of them answer "where should I apply first, given where I am now?" None use the current network, and none rank. + +## How stack127 can win + +- A short ranked list, 3 to 5 places to apply, each with one short reason and an Apply link. Extra options and growth targets sit in one closed section. +- Current published facts for 42 tracked brands, with check dates, and the two legacy brands handled. +- Honest estimates: the whole result is labeled as one, statuses are Good fit, Worth a try, and Growth target, and nothing claims approval or confirmed eligibility. Pageviews and sessions stay separate, and conversions use editorial ranges. +- Upgrade paths from the current network (Journey to Mediavine, AdSense to Monumetric or Raptive), and no step-downs for sites already on a bigger network. +- Clear lanes: replace your ads, add alongside, or run on your own ad setup. +- Real tracked sites in the same niche, counted only when the cohort is big enough. +- Growth targets that tell a small site which published bar to grow toward. + +## Blockers + +- Peer coverage was checked in development. Counts still refresh at build time, and the model works without peers. +- Complete Sovrn approval guidance and PubFuture's JavaScript-rendered FAQ were checked on 2026-10-23. PubFuture's payment minimum and methods remain unconfirmed; Net 30 is verified. +- The editorial priors in [recommendation-model.md](recommendation-model.md) are judgment, not measurement. Recheck them when profiles change. +- Rules change often. Each profile's `checkedAt` must mean the date the source was re-read. + +## Sources + +Every network claim above is sourced in its profile's `sources` list and its note in [../ad-networks/research/](../ad-networks/research/). The main official pages: + +- [Mediavine application requirements](https://www.mediavine.com/application-requirements/), [Publisher Path](https://help.mediavine.com/programs-and-the-publisher-path-to-growth), [Journey getting started](https://www.journeymv.com/getting-started-with-journey-by-mediavine/) +- [Raptive eligibility](https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive) +- [SHE Media partner FAQs](https://www.shemedia.com/partner-network/faqs), [SHE Media application](https://apply.shemedia.com/) +- [Monumetric requirements](https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/), [program overview](https://www.monumetric.com/monumetric-program-overview/) +- [Newor Media programs](https://newormedia.com/programs) +- [Ezoic requirements](https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES) +- [Playwire FAQ](https://www.playwire.com/faq), [qualification criteria](https://www.playwire.com/qualification-criteria) +- [Freestar publisher quality requirements](https://freestar.com/publisher-quality-requirements/) +- [Publift requirements](https://www.publift.com/blog/publift-requirements) +- [Publisher Collective FAQ](https://www.publisher-collective.com/faq) +- [Clickio entry standards](https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards) +- [The Moneytizer validation criteria](https://us.themoneytizer.com/faq/validation-criteria) +- [PubFuture](https://pubfuture.com/home) FAQ, read by the coordinator 2026-10-23 +- [MGID publisher help](https://help.mgid.com/publishers-general-information), [Sovrn approval requirements](https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property), [EthicalAds FAQ](https://www.ethicalads.io/publishers/faq/), [Carbon FAQ](https://www.carbonads.net/faq) +- [AdSense eligibility](https://support.google.com/adsense/answer/9724?hl=en), [Infolinks eligibility](https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks), [Revcontent account help](https://help.revcontent.com/knowledge/creating-a-revcontent-publisher-account), [Taboola new account](https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account) +- [PubGuru Premium](https://www.monetizemore.com/solutions/pubguru-premium/), [Setupad Self-Serve](https://setupad.com/setupad-self-serve/) +- [Google Analytics session definition](https://support.google.com/analytics/answer/1257084?hl=en), [CrUX methodology](https://developer.chrome.com/docs/crux/methodology#license) diff --git a/content_docs/ad-network-requirements-checker/tool-spec.md b/content_docs/ad-network-requirements-checker/tool-spec.md new file mode 100644 index 00000000..b7dc4f60 --- /dev/null +++ b/content_docs/ad-network-requirements-checker/tool-spec.md @@ -0,0 +1,412 @@ +# Ad network requirements checker + +Route: `/ad-network-requirements-checker` + +Research: [research.md](research.md). Model: [recommendation-model.md](recommendation-model.md). + +This spec replaces the earlier strict checker in full. The owner rejected that version: too many overlapping inputs, and a result made of 44 pass, short, or can't-tell rows. Nothing from its contract still applies, including its inputs, its share parameters, its statuses, and its examples route. The current code under `lib/ad-network-requirements/` and the route folder belongs to the old version and is replaced when this spec is built. + +Scope of this round: research, model, and this plan. No tool code, components, tests, or database changes. + +## People and questions + +- **Most users are** solo bloggers and small site owners. They know their niche, one or two monthly traffic numbers, roughly how old the site is, and what they earn now. +- **Their top questions:** + 1. "Where should I apply first?" + 2. "I'm on AdSense or Journey. What's my next step?" + 3. "What should I grow toward?" +- **Basic answers them with** seven things most people know offhand: niche, pageviews, visits or sessions, site age, Tier 1 share, current network, and monthly ad revenue. Niche and pageviews are required, so every list starts from real traffic. Other blanks mean unknown, and the shortlist still works. +- **Advanced holds** one thing: the country split inside Tier 1 (US, UK, Canada, Australia, New Zealand). Publishers who know it get sharper ranking for SHE Media (US share), Newor Media (US pageviews), and Monumetric (its countries leave out New Zealand). Each field is optional. Empty means the model estimates from the Tier 1 share. +- **Left out:** + - Domain rating. No network uses it. + - Domain registration date, annual revenue, revenue history, and 3-month traffic history. They duplicate Basic or ask people to dig. + - Language, platform, own Google Ad Manager, region outside Tier 1, and site address. Kept out of this version to keep the form short. Rules that depend on them show in a network's detail as "Also needs". + - Approval odds, RPM, and earnings. Nobody publishes acceptance rates, and any number from someone else's site would be made up. + - App programs (Playwire app DAU, AnyMind and Refinery89 SDKs). This tool is for websites. +- **Default example:** Food, 40,000 pageviews, 22,000 sessions, over a year, Tier 1 65%, current AdSense, $350 a month. It's the most searched case ("can I join Mediavine at 40k") and a typical small food blog. See [scenario 2](recommendation-model.md#2-food-blog-at-40000-pageviews). +- **Published comparison:** none. The research found no data set that measures traffic the way networks do. Tracked sites appear only as a peer count in a network's detail. +- **Domain limits:** numbers are never capped below what real sites enter. Shares must add up correctly (see validation). + +## Why people will choose this tool + +The searcher wants a decision: where to apply, and what to grow toward. Top results fail them: + +- Stale numbers: Raptive 100k, Mediavine 50k sessions, SHE 20k, Ezoic "no minimum". +- False precision: PubSignal works out Journey sessions from pageviews and multiplies one month of revenue by 12, then calls it a pass. +- Four networks in the best competitor, and no use of the network you're already on. +- Lists written for lifestyle blogs, with nothing for gaming or developer sites. + +What this tool does better: + +1. A short ranked list, 3 to 5 places to apply, each with one reason and an Apply link. +2. Every status is an honest estimate: `Good fit`, `Worth a try`, or `Growth target`. Nothing claims approval or confirmed eligibility. +3. Current facts for 42 tracked brands, with legacy PubNation and PubGalaxy handled. +4. Upgrade paths from the current network, and no step-downs. +5. Niche matters: gaming, developer, and lifestyle sites get different lists. +6. Extras (add-alongside networks, ad tech for big setups, growth targets) wait in one closed section. + +## Product + +### Promise and scope + +For a site owner with a niche and a few numbers, the tool returns an estimated shortlist of 3 to 5 ad networks to apply to, best first, each with a status, a short reason, a role, an Apply link, and a Details view. A closed section holds up to 6 more rows: networks to add alongside, ad tech for large setups, and growth targets. + +**Scope:** the 44 profiles in the model's [network priors](recommendation-model.md#network-priors). Websites only. USD revenue only. + +**Exclusions:** approval odds, earnings, app products, non-USD revenue, content or policy checks, and Ezoic's grandfathered path (only for sites already on Ezoic). + +### Technical contract + +**Inputs** + +| Key | Type | Parsing and bounds | +| --- | --- | --- | +| `niche` | `NicheSlug \| "other"` | Required. One of `adNetworkNiches` or `other`. | +| `pageviews` | whole number | 0 to 10,000,000,000. Commas and spaces stripped. | +| `visits` | whole number | Same bounds | +| `visitsUnit` | `sessions \| visits \| users` | Default `sessions`. Ignored when `visits` is blank. | +| `siteAge` | `lt3m \| 3to6m \| 6to12m \| gt12m` | Optional | +| `tier1Share` | number | 0 to 100, up to 1 decimal | +| `shareUS`, `shareGB`, `shareCA`, `shareAU`, `shareNZ` | number | 0 to 100, up to 1 decimal. Sum at most 100. With `tier1Share` entered: a partial split adds up to at most `tier1Share` + 0.5, and a complete split (all five) must be within 0.5 of it. Tier 1 is then normalized to the split total. An entered 0 is a real 0. See [Countries](recommendation-model.md#countries). | +| `current` | network slug, `snigel`, `none`, or `other` | Optional. Slugs from the 44 profiles. No program is asked: a current network with programs counts as its lowest program's tier. | +| `adRevenueMonth` | number | USD, 0 to 100,000,000, up to 2 decimals | + +**Estimates, ranking, status, and output:** exactly as [recommendation-model.md](recommendation-model.md), steps 1 to 6. The model doc is the source of truth for every ratio, prior, weight, threshold, and tie-break. + +**Unknowns:** every blank input has a defined effect in the model. A blank never errors and never blanks the result. + +**Invalid:** errors return per field. The last good result stays. + +**Privacy:** everything runs in the browser except the static page data. Nothing the person types is sent anywhere. + +### Backend contract + +**Files** + +| File | Holds | +| --- | --- | +| `lib/ad-network-requirements/types.ts` | Input, output, and profile types. Replaces the old file. | +| `lib/ad-network-requirements/profiles.ts` | `adNetworkProfiles`: the 44 priors from the model's table, plus each network's apply URL, published bar facts, "also needs" keys, and sources with `checkedAt`, copied from the profile JSON. Replaces `rules.ts`. | +| `lib/ad-network-requirements/estimate.ts` | `estimateMeasures` | +| `lib/ad-network-requirements/engine.ts` | `validateRecommendationInput`, `recommendAdNetworks`, `parseRecommendationQuery`, `recommendationShareParams` | +| `lib/ad-network-requirements/page-data.ts` | Server only. `loadRequirementsPageData`. Replaces `examples.ts`. | + +Delete `lib/ad-network-requirements/rules.ts`, `lib/ad-network-requirements/examples.ts`, and `app/api/ad-networks/requirement-examples/route.ts`. Peer counts come with the static page data, so the tool needs no API route. + +`profiles.ts` facts must agree with the directory's `network-facts.ts`. The directory is updated separately by the directory writer and coordinator. + +**Types** + +```ts +type VisitsUnit = "sessions" | "visits" | "users"; +type SiteAge = "lt3m" | "3to6m" | "6to12m" | "gt12m"; +type InputKey = "niche" | "pageviews" | "visits" | "visitsUnit" | "siteAge" | "tier1Share" + | "shareUS" | "shareGB" | "shareCA" | "shareAU" | "shareNZ" | "current" | "adRevenueMonth"; + +type RecommendationInput = { + niche: NicheSlug | "other"; + pageviews?: number; visits?: number; visitsUnit: VisitsUnit; + siteAge?: SiteAge; tier1Share?: number; + shares?: Partial>; + current?: string; // a profile slug, "snigel", "none", or "other" + adRevenueMonth?: number; // USD, a typical recent month, ads only +}; + +type InputErrorCode = "required" | "not_a_number" | "negative" | "not_whole" | "too_many_decimals" + | "too_large" | "over_100" | "shares_over_100" | "shares_over_tier1" | "split_mismatch" | "invalid_choice"; + +type Interval = { lo: number; hi: number; exact: boolean }; +type Measures = Partial> & { noCountryInput: boolean }; +// Shares: feasible bounds from every entered share, intersected with the editorial prior; empty intersection keeps the feasible bounds. + +type Lane = "main" | "add" | "setup"; +type Status = "good_fit" | "worth_a_try" | "growth_target"; +type Basis = "published_number" | "estimate" | "no_minimum" | "review_led"; +type ReasonCode = "published_bar" | "estimated_bar" | "apply_guidance" | "revenue_signal" | "revenue_bar" + | "no_minimum" | "case_by_case" | "niche_specialist" | "sales_led" | "upgrade" | "check_contract" | "fit_estimate"; + +type BarFact = { // a network's own published rule, for detail and growth targets + metric: "pageviews" | "tier1_sessions_30d" | "visits" | "visitors" | "monthly_active_users" + | "us_pageviews" | "ad_revenue_month" | "ad_revenue_previous_calendar_year" + | "tier1_share" | "us_share" | "organic_unique_visitors_30d" | "none"; + comparator: "at_least" | "more_than" | "none"; + amount: number | null; + currency: "USD" | "EUR" | null; // money only, never converted: Publisher Collective is EUR + period: "month" | "day" | "30_days" | "previous_calendar_year" | null; // e.g. EUR 300 a day + scope: string | null; // "outside core genres", "US, UK, Canada, Australia" + program: string | null; // "Catapult", "Self-Serve", null + kind: "requirement" | "guidance"; // guidance: Playwire 100k, Freestar typical 1M, Clickio indicative, Publisher Collective EUR 300 a day + sourceUrl: string; checkedAt: string; +}; + +type Recommendation = { + slug: string; program: string | null; lane: Lane; status: Exclude; + reason: { code: ReasonCode; values: Record }; // e.g. { bar: 25000, yours: 40000 } + upgrade: boolean; checkContract: boolean; applyUrl: string; + detail: { bars: BarFact[]; alsoNeeds: string[]; peers: number | null; directoryHref: string }; + debug: { score: number; rank: number; basis: Basis; S: number; TM: number; G: number; Cc: number; + P: number | null; Aeff: number; Aage: number; Nmult: number; estimated: (keyof Measures)[] }; +}; +type GrowthTarget = { slug: string; program: string | null; bar: BarFact }; + +type Lead = + | { kind: "apply"; slug: string; count: number } + | { kind: "grow"; slug: string } + | { kind: "no_step_up"; current: string } + | { kind: "none_stand_out" }; + +type RecommendationResult = { + lead: Lead; // model Step 6, Lead + main: Recommendation[]; // 0 to 5, ranked + more: { add: Recommendation[]; setup: Recommendation[]; growth: GrowthTarget[] }; // up to 2 each + suggestInput: InputKey | null; +}; +``` + +`debug` is for the focused test and the development preview. The frontend never renders it. `alsoNeeds` holds fact keys (such as `english`, `wordpress_or_blogger`, `own_gam`, `not_wix`, `ga_access`, `exclusive`, `incubator_limited`), and the frontend owns their words. `peers` is null when the count is under 5 or niche is `other`. + +**Functions** + +```ts +// Raw strings in. Empty string = not given. +export function validateRecommendationInput(raw: Partial>): + { ok: true; input: RecommendationInput } | { ok: false; errors: Partial> }; +// shares_over_100, shares_over_tier1, and split_mismatch are reported on shareUS. + +export function estimateMeasures(input: RecommendationInput): Measures; + +export function recommendAdNetworks(input: RecommendationInput, + peers: Partial> | null, // slug → confirmed sites in the niche + profiles?: AdNetworkProfile[]): RecommendationResult; // pure, deterministic + +export function parseRecommendationQuery(params: URLSearchParams): + { shared: boolean; raw: Partial> }; +export function recommendationShareParams(raw: Partial>): Record; +``` + +**Share parameters** + +| Param | Field | +| --- | --- | +| `niche` | Niche | +| `pv` | Pageviews | +| `visits`, `unit` | Visits and its unit (`sessions`, `visits`, `users`) | +| `age` | Site age band | +| `t1` | Tier 1 share | +| `us`, `gb`, `ca`, `au`, `nz` | Country split | +| `current` | Current network | +| `rev` | Ad revenue a month | + +`shared` is true only when `niche` is present. Empty values are left out. Any other parameter is ignored, including the old version's `traffic`, `rev_prev`, `pv_min3`, `domain_on`, and `site`. + +**Page data (server)** + +```ts +export async function loadRequirementsPageData(): Promise<{ + networks: { slug: string; name: string; logo: NetworkLogoFile | null; directoryHref: string }[]; // 44 profiles + peers: Record>>; // confirmed sites per niche per network + defaultResult: RecommendationResult; // the default example, with food peers +}>; +``` + +- Peers count confirmed relationships only, by niche. One grouped query over `public.ad_network_publishers` and `public.ad_network_publisher_relationships`, as the old examples loader did, without the site or band arguments. +- `unstable_cache` with `revalidate: false` under the existing ad-networks tag, so the page stays static and refreshes on demand. +- Names come from `listAdNetworks()`. Legacy brands keep their directory names. A profile slug missing from the database throws at build. + +### Known examples + +The focused test covers the nine [expected rankings](recommendation-model.md#expected-rankings) and regressions R1 to R11: the lead, the main list in order with scores to 2 decimals, each status, and what's in the closed section. It also checks the [calibration rules](recommendation-model.md#calibration-checks). A fresh arithmetic review confirms these numbers before the build starts. + +Boundary and unit cases: + +| Input | Expected | +| --- | --- | +| 22,000 sessions, pageviews blank | Pageviews estimated 26,400 to 44,000 | +| 40,000 pageviews, visits blank | Sessions estimated 20,000 to 33,333 | +| 50,000 users | Sessions 55,556 to 83,333. Visitors and monthly active users 50,000, estimated. | +| Visits 100,000, unit visits | Sovrn isn't offered (strictly more than 100,000). At 100,001 it can appear under `Add alongside` with basis `published_number`. The same numbers with unit `sessions` are estimated visits, so the basis is `estimate`. | +| Gaming, 99,999 pageviews, over a year, Tier 1 40, current none | PubFuture is the first growth target (0.99999). At 100,000 it's third in the main list (79.00). | +| Food, 120,000 pageviews, over a year, Tier 1 70, current none, $419 a month | Mediavine is the first growth target (closeness 0.9976), shown with its own bar ($5,000 ad revenue in the previous calendar year). At $420 it's fourth in the main list (score 89.59) with reason `revenue_signal`. No result anywhere contains a prior-year revenue figure. | +| Tier 1 50, splits blank | Monumetric share [47, 50] straddles 50: `G` 0.7, estimated. With US 40, UK 6, CA 3, AU 1 (NZ blank): [50, 50], exact, `G` 1.0. | +| Tier 1 60, UK 50, rest blank | US [0, 10]: the prior [33, 54] doesn't overlap, so the feasible bounds stand. SHE Media becomes a growth target. | +| US 0, UK 0, CA 0, AU 50, NZ 50 | Tier 1 100. Moneytizer share [0, 0], exact. The zeros are never estimated upward. | +| Five splits adding up to 55, Tier 1 65 | `split_mismatch`. With Tier 1 55.4: Tier 1 becomes 55. | +| Sports, 100,000 pageviews, Tier 1 70 | Newor picks Elevate (US pageviews [38,500, 63,000]). With US 62: Catapult, `S` 0.8508, `published_number`. | +| Food, 600,000 pageviews, $12,000 a month | Publisher Collective fails its 3,000,000 requirement outside core genres. Its revenue route can't get around it. | +| Current Concert, 20,000 pageviews | Lead `no_step_up`. Main and growth empty. | +| Food, 40,000 pageviews, 3 to 6 months, Tier 1 60, current none | Raptive isn't gated, but `Aage` 0.5 puts it at 43.29, under 45, so it's not shortlisted (R7). | +| Current `pubnation` | Mediavine and Journey are both dropped. | +| Current `snigel` | Publisher Collective is dropped. | +| Current `buysellads-carbon-ads` | `more.add` is empty. | +| Niche `other` | No specialist, Carbon, or EthicalAds. `peers` null. | +| Only niche entered (food) | Main: AdSense 85.87, Newor Elevate 55.94, Monumetric 47.29, Journey 45.60. `suggestInput` is `adRevenueMonth`. | +| Personal finance, 8,000 pageviews, Tier 1 70, $6,000 a month | Revenue routes open premium networks at low traffic: Mediavine, Publift, Clickio, PubGuru, then AdSense (R11). | +| Invalid | `pv=-5` gives `negative`. `pv=abc` gives `not_a_number`. `pv=9.5` gives `not_whole`. `t1=101` gives `over_100`. `us=60&gb=50` gives `shares_over_100`. `t1=40&us=45` gives `shares_over_tier1`. `age=2y` and `current=foo` give `invalid_choice`. Empty niche gives `required`. | + +### Ownership + +| Owner | Files | +| --- | --- | +| Sol (backend) | Everything under `lib/ad-network-requirements/`, deleting the old examples route, focused test `tests/pages/ad-network-requirements-checker/engine.test.mjs`, and the development preview row | +| Opus (frontend) | `app/(site)/(tools)/ad-network-requirements-checker/*-tool.tsx`, `*-from-url.tsx`, `*.module.css`, a new `recommendation-card.tsx`, removing `network-detail.tsx`, and every word in them | +| Integration | `page.tsx`, `layout.tsx`, `content/*.mdx`, card art, publish manifest, catalogs | + +### Catalog placement + +- **Primary: Publisher tools** (`/publisher-tools`), as planned in [the publisher tools brief](../publisher-tools/brief.md). The reader's task is making money from a content site. +- **Secondary: none.** +- **Links:** from `/ad-networks` and each network page's joining tab. + +**Card art** (`toolSpot`, art key `ad-network-requirements-checker`): + +- **Takeaway:** a short list of where to go next. +- **Focal subject:** a signpost with three arrows of different lengths, the top one marked as the pick. +- **Supporting object:** a small browser window at the foot of the post. +- **Tone:** hopeful and neutral. No red or green, no visible words. Reads at card size in both themes. + +## Interface + +### Flow + +- **Question:** "Where should I apply?" +- **Lead answer:** the top pick by name, with the count: `Apply to Monumetric first` and `5 places to try`. The `Estimate` label sits beside it, once, for the whole result. +- **Opens on:** the default example, its result showing and marked `Example`. +- **Button:** `Find networks`, with `Reset` beside it. + +### Inputs + +| Input | Basic or Advanced | Required or optional | Hint | What it changes | +| --- | --- | --- | --- | --- | +| Niche | Basic | Required | none | Niche fit, specialists, niche-gated networks, peers | +| Pageviews a month | Basic | Optional | `From your analytics, a typical recent month.` | Every pageview bar and the scale tier | +| Visits or sessions a month, with unit `Sessions`, `Visits`, `Users` | Basic | Optional | `Pick the name your analytics uses.` | Journey, Sovrn, MGID, Ezoic, and pageviews when blank | +| Site age: `Under 3 months`, `3 to 6 months`, `6 to 12 months`, `Over a year`, `Not sure` | Basic | Optional. `Not sure` sends a blank, so the choice can always be undone. | none | Raptive, SHE Media, Journey, Monumetric ranking | +| Tier 1 share | Basic | Optional | `US, UK, Canada, Australia, and New Zealand together.` | Raptive, Freestar, Monumetric, Journey, and every Tier 1 leaning network | +| Current ad network | Basic | Optional | `Choose None if you don't run ads yet.` | Upgrades, step-downs, the AdSense pin, add-alongside conflicts | +| Ad revenue a month, `USD` suffix | Basic | Optional | `Ads only, in a typical recent month. Leave out affiliate income.` | Mediavine, Publift, PubGuru, Clickio, the scale tier | +| US, UK, Canada, Australia, New Zealand shares | Advanced: `Country split` | Optional | US: `Part of your Tier 1 share.` Others none | SHE Media, Newor Media, Monumetric, and the Tier 1 share when that's blank | + +The Advanced summary uses `uiSetSummary`. Current network options: `None`, then the 42 current brands by name, `PubNation`, `PubGalaxy`, `Snigel (now Publisher Collective)`, and `Another network`. + +### Result + +1. **Lead:** from `lead`, with the `Estimate` label. `apply`: `Apply to first` and ` places to try`. `grow`: `Grow toward next`. `no_step_up`: `No clear step up from right now`. `none_stand_out`: `No network stands out for these numbers yet`. The lead never asks for more input and never says "can't tell". +2. **Ranked cards,** 3 to 5, one per row. Each card: rank number, `NetworkLogo`, name and program, status word (`Good fit` or `Worth a try`), the role tag, one reason line, and two actions: `Apply` (external, the profile's apply URL) and `Details`. The ranked order is the visual: logos down a numbered list read faster than any chart, and there's no number worth plotting. +3. **Details** opens in place under the card as a short labeled list: `What they ask` (published requirements in plain words), `Their guidance` (guidance bars), `Also needs`, `Sites we track` (`1,943 food sites use it`, only at 5 or more), and `Source` (page link and check date). Then a link to the network's directory page. No scores, no weights. A new run closes any open Details. +4. **One suggestion line** when `suggestInput` is set: `Add your monthly ad revenue to place Mediavine and Publift.` with a button that focuses the field. +5. **`More options`**, one closed `UiDisclosure` with a count summary. Inside, three short groups, each only when it has rows: `Add alongside`, `For your own ad setup`, `Grow toward`. Add and setup rows are compact: logo, name, status word, reason, `Apply`. Growth rows: logo, name, `Growth target`, the published bar ("At least 25,000 pageviews a month"), and a `Details` link to the directory page. +6. **`UiShareAction`** at the end. + +Status words never use success or danger colors. `Good fit` uses the accent text, `Worth a try` the normal text, `Growth target` muted. + +### Components + +**Existing:** + +| Component | Import | +| --- | --- | +| `ToolWorkbench`, `ToolFieldRow`, `ToolResult` | `app/ui/tools/tool-workbench.tsx` | +| `UiSelect`, `UiComboBox`, `UiNumberField`, `UiQuantityInput`, `UiChoiceGroup`, `UiButton`, `UiDisclosure`, `uiSetSummary`, `UiShareAction` | `app/ui/controls.tsx` | +| `UiResultLead`, `UiStatus`, `UiStatusWord` | `app/ui/display.tsx` | +| `NetworkLogo`, `networkLogo` (server) | `app/ui/ad-networks/network-logo.tsx`, `network-logo-src.ts` | +| `useInitialQuery` | `app/ui/tools/use-initial-query.ts` | + +**New shared components:** none. + +**Tool-specific:** + +- `ad-network-requirements-checker-tool.tsx`: form, state, and result. +- `ad-network-requirements-checker-from-url.tsx`: shared-link wrapper. +- `recommendation-card.tsx`: the ranked card with its in-place detail, and the compact row used in `More options`. + +### Layout + +- **Basic rows:** + 1. Niche | Current ad network. + 2. Pageviews a month | Visits or sessions a month (with its unit select). + 3. Tier 1 share | Ad revenue a month. + 4. Site age, a visible choice row of five, including `Not sure`. + Then the action row. +- **Advanced:** `Country split`, one row of five share fields. +- **Desktop:** the lead at the left edge, then the cards as a numbered vertical list at reading width (about 44rem). Each card is one line of logo, name, status, and role, with the reason under the name and the actions on the right. `More options` sits under the list. +- **Phones:** every field row stacks. The five share fields go two per line. The age choices wrap to two per line. Cards become three lines: logo, name, and status, then the reason, then the actions. + +### States + +- **Example:** the default result marked `Example`. +- **Stale:** after an edit, `ToolResult stale` with `Inputs changed`. The result stays. +- **Invalid:** errors under each field on pressing the button, focus on the first. If it's inside `Country split`, open it first. The last good result stays, stepped back. +- **Thin result:** fewer than 3 cards is fine. The lead still names the top pick, and `More options` holds the growth targets. +- **Nothing in the main list:** the lead follows its `lead.kind`. A very small site on AdSense gets `grow`. A site on a top-tier network such as Concert gets `no_step_up`. The card region keeps its height. +- **Niche `Something else`:** no peers, no specialists. +- **Shared link:** opens and calculates at once. Invalid values show their errors the same way. +- **Reset:** back to the example. + +### Accessibility + +- Cards are an ordered list. Each `Details` is a button with `aria-expanded`. +- The status is in text, not color alone. +- The live region announces the lead line after a run. + +## Content + +Written in the writing round on 2026-10-23 with `skills/stack127/tools/stack127-tool-writing/SKILL.md`. + +### Search intent and title + +Main phrase: "ad network requirements checker". Words top titles add: free, requirements, 2026, and brand names. Questions: which networks take small sites, Mediavine at 40k, Raptive pageviews or sessions, Journey vs Mediavine. See [Search words](research.md#search-words), checked 2026-10-22. + +Handoff for integration. These go in the publish manifest and `public.stack127_tool_pages`, never in page files: + +| Field | Value | +| --- | --- | +| H1 (`title`) | Which ad network should you apply to? | +| SEO title (`meta_title`) | Free ad network requirements checker: where to apply | +| SEO description (`meta_description`) | Put in your niche, traffic, and ad revenue to get 3 to 5 ad networks to apply to, best first, from AdSense to Mediavine. Rules checked in October 2026. | +| Card name | Ad network requirements | +| Card description | Find the ad networks to apply to, best first. | + +The SEO title is 52 characters and the description 151. The card name stays the same as the current sidebar label. The description names a check month, so update it when the rules are rechecked. The tool behavior changed from the strict checker, so integration confirms the `tool_version` with the coordinator. + +### Reader questions + +| Question | Answered in | +| --- | --- | +| Where should I apply first? | Tool result (lead and cards) | +| What do I need to enter, and what if I don't know a number? | Usage | +| What do the statuses and Details mean? | Usage | +| What does each network publish? | Content: requirements table | +| Can I join Mediavine at 40k pageviews? | Content | +| Is Journey easier than Mediavine? | Content | +| Does Raptive count sessions or pageviews? | Content | +| Sessions or pageviews: which do I enter? | Usage and content | +| What is Tier 1 traffic? | Content | +| Which networks take small sites? | Content | +| Why is a network I know missing? | Content | +| How is the order picked? | Content | + +### Outline + +- **Intro:** the reader's situation, what they put in, what they get, and that it's an estimate every network still reviews. +- **Usage:** what to enter (bullets per input), how to read the result (statuses, reason, Apply, Details, Estimate, More options), one worked example on the default, Copy link and Reset. +- **Content:** a requirements table with each network's own page linked; then question headings for Mediavine at 40k, Journey vs Mediavine, Raptive's unit, sessions vs pageviews, Tier 1, small sites, missing networks, and how the order is picked. Links to the [ad networks directory](/ad-networks) and the [ad network checker](/ad-network-checker) sit inside sentences. + +### Facts, limits, and sources + +Every number in the table comes from the network's own page, linked in the table, read on 2026-10-22 or 2026-10-23 (PubFuture's FAQ). The page says: results are estimates; every network reviews each site; no approval is promised; Mediavine counts the previous calendar year's ad revenue; Journey counts Tier 1 sessions; AdSense and Taboola have no published traffic minimum. + +The page must not say approved, eligible, qualifies, or guaranteed, give an earnings, RPM, or acceptance-rate figure, or turn monthly revenue into last year's income. + +### Interface words + +Final words in the frontend, after the writing pass: + +- Reason lines are one or two short sentences, such as "Asks for 25,000 pageviews. You have 40,000.", "Asks for 1,000 Tier 1 sessions a month. You likely have more.", "No published traffic minimum. Every site is reviewed.", and "Your ad revenue makes it worth a look. It counts last calendar year's earnings." +- The role line shows only on cards outside the main lane, such as "Runs on your own ad setup" when PubGuru reaches the main list. Main cards don't repeat "Replaces your ads". +- Details reads the network's own source list and labels when the backend sends them, and falls back to the sources behind its bars. + +### Next step + +Link the [ad networks directory](/ad-networks) for full network pages, and the [ad network checker](/ad-network-checker) to see which networks a real site uses. diff --git a/content_docs/ad-networks/brief.md b/content_docs/ad-networks/brief.md index 4ac56cee..012e136c 100644 --- a/content_docs/ad-networks/brief.md +++ b/content_docs/ad-networks/brief.md @@ -2,15 +2,39 @@ The reader wants to find an ad network and see which publisher websites currently have a verified relationship with it. The parent directory lists the reviewed network roster. Each network page lists confirmed publisher domains with a precise relationship label and last checked date. -The draft has 45 network identities and uses `/ad-networks` and `/ad-networks/`, plus `/ad-networks/niches`, `/ad-networks/niches/`, `/ad-networks/stats`, and the `/ad-network-checker` tool. See [plan.md](plan.md). Search and pagination stay on these routes through query parameters. Candidate domains and ambiguous matches never appear in the public list. Empty network pages explain that no sites have been verified yet. The pages remain unpublished in `stack127_pages` until the data collection and verification work has been reviewed. +The directory has 44 network identities and uses `/ad-networks` and `/ad-networks/`, plus `/ad-networks/niches`, `/ad-networks/niches/`, `/ad-networks/stats`, and the `/ad-network-checker` tool. See [plan.md](plan.md). Search and pagination stay on these routes through query parameters. Candidate domains and ambiguous matches never appear in the public list. Empty network pages explain that no sites have been verified yet. -The source of truth is the three table model in [plan.md](plan.md): network identity, globally deduplicated publisher domain, and a separate verified relationship. A discovery source is a lead, not proof of network use. The relationship row provides the evidence for a public claim. Niche, platform, domain age, and traffic group come from later data runs. Until a run fills a field, the page says "Not listed". The pages make no earnings claims. +The source of truth is the three table model in [plan.md](plan.md): network identity, globally deduplicated publisher domain, and a separate verified relationship. A discovery source is a lead, not proof of network use. The relationship row provides the evidence for a public claim. Until a data run fills a field, the page says "Not listed". The pages make no earnings claims. ## Current release boundary -The parent and 45 child registry rows remain unpublished in development and production. Shipping their code, identity data, and docs does not launch the directory. The managed publisher and relationship tables remain empty; the independent homelab SQLite queue is preserved. +The directory and its network pages are live in production. See [production-runbook.md](production-runbook.md) and [maintenance.md](maintenance.md) for how the data refreshes. -The two GitHub discovery and verification workflows are manual previews. They have no schedules and run without `--apply`, so they do not save candidates or verification results. Enabling production writes, copying reviewed SQLite results, scheduling production refreshes, and publishing pages each need a separate activation review. +The October 2026 enrichment of network facts and copy, from `recommendation-profiles-a.json`, `recommendation-profiles-b.json`, and `research/.md`, is development-only until the coordinator reviews and releases it through a pull request. + +## Copy plan: network pages + +Checked 2026-10-22 to 2026-10-23. All 44 network pages and the parent article were rewritten in two batches of 22. PubNation (moved to Mediavine) and PubGalaxy (moved to Improve Digital) remain tracked legacy pages with no standalone application route. The other 42 profiles cover current services, including sales-led and invitation-only offers. + +The problem: network pages said "Not public" over and over instead of telling a reader whom the network suits and how to approach it. The fact rows already show every published number and list what's missing, so the words do a different job. + +| Part | Job | Leave out | +| --- | --- | --- | +| Intro | What this product is and who it's for, in two sentences. Distinct per network. | Numbers the header and fact rows show. | +| Joining | How to apply, with the official link, and what the review weighs: program, audience, platform, setup, dated or conflicting rules. | Lists of unpublished fields. | +| Pay | Only what the rows can't say: which program a rate covers, dated terms, conflicts between sources. | Repeating the rows. | +| Rules | Exclusivity in plain terms (site-wide, per page, or per slot), contract length, notice. | "Not public" lists. | +| Service | What the network actually does for you. | Filler when nothing is known. | +| Article | Fit, alternatives, and the few questions a reader brings, with dated first-hand reports where they help. | The generic ads.txt checker answer on every page. | + +Evidence rules: + +- Official facts, dated publisher reports, and editorial judgment stay separate. A report names its date and source and says it's one case. +- Never turn reports into rejection odds or thresholds. No traffic estimates without a published basis. +- Keep the network's own metric: Ezoic monthly active users, MGID daily or monthly visitors, Mediavine previous calendar year revenue, Monumetric three months in a row, Journey Tier 1 sessions. +- A missing number is not an easy approval. AdSense and Newor Elevate publish no traffic minimum, but both review sites. +- Keep separate products apart: Setupad managed versus Self-Serve, Adnimation managed versus MAP, Sovrn Ad Exchange versus Commerce, Playwire's FAQ rule versus its ROI guidance, and referral-program rules (Opti Digital, Snack Media) versus entry rules. +- Dated sources keep their date in the copy, such as Infolinks' 2015 agreement, AdPushup's 2021 terms, APS's 2023 fee, and Journey's April 2024 domain-history guidance. ## Search words diff --git a/content_docs/ad-networks/maintenance.md b/content_docs/ad-networks/maintenance.md index 3bd3585d..66c8f1f2 100644 --- a/content_docs/ad-networks/maintenance.md +++ b/content_docs/ad-networks/maintenance.md @@ -35,7 +35,7 @@ The full sync now includes measured homepage title, description, h1, language, a The model runs in a neutral temporary directory with tools disabled. Database credentials, tokens, passwords, secrets, and API keys are removed from its environment. Batch checkpoints live in `~/.local/state/stack127/ad-networks-niche/niche-results.json`, and the last run's result in `niche-status.json` beside it, outside Git. The import waits in the sync lock queue for up to 60 minutes, retrying after each 100-second lock timeout, because an OVH sync holds it for most of each cycle. Only the niche timer remains in `scripts/ad-networks/systemd/`. Keep the installed homelab backup timer until the original RDAP pass and gather supervisor finish: their already-loaded code still calls it at midnight. Do not stop the one-time RDAP pass. -Per-network Top niches now appears for any nonempty sorted sample. Shares use sorted sites, and the sorted count is visible. The 100-site/80% gates remain for broad niche comparisons, controls, and index/child loaders; the 500-site child publication gate remains too. Nothing in this round publishes those pages. +Per-network Top niches now appears for any nonempty sorted sample. Shares use sorted sites, and the sorted count is visible. The 100-site gate remains for broad niche comparisons, controls, and index/child loaders; the 500-site child publication gate remains too. Nothing in this round publishes those pages. ### Alerts and recovery @@ -287,7 +287,7 @@ A binary or misencoded preview containing NUL bytes stays null in new summaries The six mockup contracts and current development availability are in [the data contract](../../dev-space/ad-networks-data-contract.md). Pages consume `getAdNetworkDirectoryData`, `getAdNetworkPageData`, `getAdNetworkNichesPageData`, `getAdNetworkNichePageData`, and `getAdNetworkStatsPageData`. Both APIs use the same library gates. Table responses include `availableColumns`, `availableSorts`, `availableFilters`, actual filter values, and `effectiveSort`; the default page size is 10. Explicit page sizes from 1 to 100 remain supported. A stale shared URL asking for a missing traffic/age sort falls back to domain order. -Broad niche comparisons open once 100 sites and 80% of the relevant scope are classified. Before that, niche controls are empty and niche-page loaders return null. A network’s own Top niches block is available with one sorted site and uses the sorted sample as its denominator. Site-level fields use null individually; traffic, age, platform and publisher aggregates stay empty until populated. Manager charts hide when every manager is unknown. Niche indexing still needs the separate 500-site publication decision. +Broad niche comparisons open once 100 sites are classified. Since Oct 23, 2026 there's no coverage share rule, so a slow or failed weekly sort can't hide published niche pages. Before that, niche controls are empty and niche-page loaders return null. A network’s own Top niches block is available with one sorted site and uses the sorted sample as its denominator. Site-level fields use null individually; traffic, age, platform and publisher aggregates stay empty until populated. Manager charts hide when every manager is unknown. Niche indexing still needs the separate 500-site publication decision. History charts need two exact month-end snapshots. Partial months are excluded and no observations are interpolated. The annual headline needs a snapshot on the exact year-ago date (February 28 for a leap-day anniversary). A sparse older snapshot never becomes a mislabeled annual change. A 90-day net-change number needs a snapshot at least 90 days old and then counts real joins minus departures. Imported baseline events never enter joins, new-site totals, or newest-site lists. Weekly scan/checker stacks require stored source provenance for every site in the week. Publisher leaderboards admit conservative business-name suffixes and omit personal or ambiguous names. These gates carry `// data-gate:` comments in lib for the January 2027 follow-up. diff --git a/content_docs/ad-networks/recommendation-profiles-a.json b/content_docs/ad-networks/recommendation-profiles-a.json new file mode 100644 index 00000000..cab8ff9b --- /dev/null +++ b/content_docs/ad-networks/recommendation-profiles-a.json @@ -0,0 +1,5270 @@ +[ + { + "slug": "adapex", + "productType": "Managed yield optimization and ad-stack infrastructure", + "applicationUrl": "https://adapex.io/get-in-touch/", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Pay day", + "value": "Net 60", + "note": "Monthly net terms; no public threshold or share.", + "sourceUrl": "https://adapex.io/faqs/" + } + ], + "joining": [ + { + "label": "Application inputs", + "value": "Publisher form asks monthly revenue, monthly pageviews, and USA traffic share", + "note": "These are intake fields, not a published cutoff.", + "sourceUrl": "https://adapex.io/get-in-touch/" + }, + { + "label": "Traffic", + "value": "No numeric minimum published; positioned for mid-sized publishers", + "sourceUrl": "https://adapex.io/faqs/" + }, + { + "label": "Must connect", + "value": "Google Ad Manager through MCM", + "note": "Adapex says it works with existing AdSense, AdX and Prebid.", + "sourceUrl": "https://adapex.io/faqs/" + }, + { + "label": "Contract", + "value": "No long-term contract required to start; longer terms can be offered", + "sourceUrl": "https://adapex.io/faqs/" + } + ], + "revenueShare": "Not public", + "paymentTerms": "Net 60; paid monthly through the publisher's established method", + "paymentThreshold": null, + "paymentMethods": [], + "sources": [ + { + "label": "Publisher FAQ", + "url": "https://adapex.io/faqs/" + }, + { + "label": "Contact", + "url": "https://adapex.io/get-in-touch/" + } + ] + }, + "fit": { + "publisherTypes": [ + "mid-sized web publishers with an existing ad stack" + ], + "nichesStrong": [ + "established editorial and content inventory" + ], + "nichesWeak": [ + "new low-volume blogs without GAM" + ], + "geographies": [ + "No public mix" + ], + "role": "infrastructure", + "entryPositioning": "Contact-led managed yield service. It targets mid-sized publishers, asks for monthly revenue, monthly pageviews and US traffic share, but publishes no numeric floor.", + "compatibilityNotes": [ + "Current FAQ says it integrates with existing AdSense, AdX and Prebid and does not force publishers to remove partners.", + "GAM via MCM is required; flexible short-term testing is available." + ] + }, + "officialRequirements": [ + { + "metric": "Traffic", + "comparator": "no numeric floor published", + "amount": null, + "unit": "not stated", + "period": "not stated", + "scope": "web publishers", + "program": "Managed service", + "sourceUrl": "https://adapex.io/faqs/", + "note": "FAQ uses substantial-traffic language." + }, + { + "metric": "Ad server", + "comparator": "requires", + "amount": null, + "unit": "Google Ad Manager / MCM", + "period": "during service", + "scope": "managed publishers", + "program": "Managed service", + "sourceUrl": "https://adapex.io/faqs/", + "note": null + }, + { + "metric": "Content", + "comparator": "must comply", + "amount": null, + "unit": "publisher policies", + "period": "ongoing", + "scope": "site content", + "program": "Managed service", + "sourceUrl": "https://adapex.io/faqs/", + "note": null + }, + { + "metric": "Application form", + "comparator": "asks for", + "amount": null, + "unit": "monthly revenue, monthly pageviews, USA traffic share", + "period": "at application", + "scope": "publisher site", + "program": "Managed service", + "sourceUrl": "https://adapex.io/get-in-touch/", + "note": "Intake fields are not eligibility thresholds." + } + ], + "observations": [ + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/yvtwkr", + "publishedAt": null, + "site": "Unidentified publisher", + "niche": "Not stated", + "traffic": null, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "Thread asked whether publishers were making money with Adapex; no verifiable acceptance or earnings example emerged.", + "limits": "Question only; no site, traffic, revenue or outcome." + } + ], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Shortlist when an established publisher wants an optimization partner that works around its current stack. A beginner without GAM has no confirmed application path.", + "currentNetworkSignals": [ + "Existing AdSense, AdX or Prebid can be integrated; this is compatibility evidence, not a guarantee of selection." + ], + "geographyPreference": "Publisher contact form asks for USA traffic share; no target percentage is published.", + "agePreference": "No public site-age minimum found.", + "confidence": "low", + "rationale": "Current FAQ gives mid-sized publisher positioning, MCM, compatibility and payment terms; contact form requests monthly revenue, monthly PV and US traffic share without publishing thresholds.", + "supportingSourceUrls": [ + "https://adapex.io/faqs/" + ], + "gaps": [ + "No numeric traffic, revenue, country-share or site-age gate published.", + "No reliable independent acceptance or revenue case found; the located forum thread was a question." + ] + }, + "sources": [ + { + "url": "https://adapex.io/faqs/", + "title": "Publisher FAQ", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "mid-sized positioning", + "GAM/MCM and compatibility", + "Net60" + ] + }, + { + "url": "https://adapex.io/contact/", + "title": "Contact route", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "application route" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/yvtwkr", + "title": "Adapex publisher question", + "kind": "publisher_forum", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "no verified application outcome" + ] + }, + { + "url": "https://adapex.io/get-in-touch/", + "title": "Publisher contact form", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "collects monthly revenue, monthly pageviews and US traffic percentage as application inputs; no listed cutoff" + ] + } + ], + "checkedAt": "2026-10-22" + }, + { + "slug": "aditude", + "productType": "Publisher ad-tech platform and managed monetization support", + "applicationUrl": "https://www.aditude.com/contact", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [], + "joining": [ + { + "label": "Application", + "value": "Book a demo/contact sales; no self-serve gate found.", + "note": "Web/app platform with tailored service.", + "sourceUrl": "https://www.aditude.com/contact" + }, + { + "label": "Traffic", + "value": "No public numeric requirement found.", + "sourceUrl": "https://www.aditude.com/case-studies" + }, + { + "label": "Publisher types", + "value": "Case studies cover media, gaming, audio and apps.", + "sourceUrl": "https://www.aditude.com/case-studies" + } + ], + "revenueShare": null, + "paymentTerms": null, + "paymentThreshold": null, + "paymentMethods": [], + "sources": [ + { + "label": "Publisher platform", + "url": "https://www.aditude.com/" + }, + { + "label": "Case studies", + "url": "https://www.aditude.com/case-studies" + }, + { + "label": "Dexerto case study", + "url": "https://www.aditude.com/case-studies/dexerto" + }, + { + "label": "Publisher contact", + "url": "https://www.aditude.com/contact" + } + ] + }, + "fit": { + "publisherTypes": [ + "large or technically complex web/app publishers with ad-ops needs" + ], + "nichesStrong": [ + "gaming", + "digital media", + "audio", + "apps" + ], + "nichesWeak": [ + "small solo blogs seeking a quick self-serve tag" + ], + "geographies": [ + "No public target mix" + ], + "role": "infrastructure", + "entryPositioning": "Demo-led platform; customer examples suggest enterprise fit, but no public traffic gate.", + "compatibilityNotes": [ + "Public materials do not settle exclusivity or network coexistence; ask during sales review." + ] + }, + "officialRequirements": [ + { + "metric": "Application", + "comparator": "contact-led demo", + "amount": null, + "unit": "not stated", + "period": "not stated", + "scope": "publisher businesses", + "program": "Publisher platform", + "sourceUrl": "https://www.aditude.com/", + "note": null + }, + { + "metric": "Traffic", + "comparator": "not published", + "amount": null, + "unit": "not stated", + "period": "not stated", + "scope": "publisher sites", + "program": "Publisher platform", + "sourceUrl": "https://www.aditude.com/case-studies", + "note": null + }, + { + "metric": "Product scope", + "comparator": "supports", + "amount": null, + "unit": "web and app inventory", + "period": "ongoing", + "scope": "publisher inventory", + "program": "Publisher platform", + "sourceUrl": "https://www.aditude.com/", + "note": null + } + ], + "observations": [ + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/1ozpww8", + "publishedAt": null, + "site": "Unnamed visual-design web app", + "niche": "Free visual-design app", + "traffic": { + "value": 1100000, + "metric": "monthly GA users", + "period": "month" + }, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "Poster said they started with Aditude and later tested other partners after reliability issues with ad placements/integration.", + "limits": "Anonymous; no revenue or admission detail." + }, + { + "sourceUrl": "https://www.aditude.com/case-studies/dexerto", + "publishedAt": null, + "site": "Dexerto", + "niche": "Gaming/esports media", + "traffic": null, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "Vendor case reports a 15% revenue lift and 10% more ads per session against prior setup.", + "limits": "Vendor case, no traffic/revenue baseline; comparison windows differ." + } + ], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Consider for sizeable publishers with ad-ops/product/engineering needs and the capacity to evaluate a demo. Not a default for a new blog.", + "currentNetworkSignals": [ + "Existing managed ad-tech peers are not proof of Aditude acceptance." + ], + "geographyPreference": "No public country mix found.", + "agePreference": "No public site-age minimum found.", + "confidence": "low", + "rationale": "Case studies show customer types, not a floor; one independent operator describes scale and integration concerns, not eligibility.", + "supportingSourceUrls": [ + "https://www.aditude.com/", + "https://www.aditude.com/case-studies", + "https://www.reddit.com/r/adops/comments/1ozpww8" + ], + "gaps": [ + "No public traffic, revenue, age, geography, payment or share rules.", + "No named first-person acceptance story with application metrics." + ] + }, + "sources": [ + { + "url": "https://www.aditude.com/", + "title": "Publisher ad-tech platform", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "web/app platform", + "contact route" + ] + }, + { + "url": "https://www.aditude.com/case-studies", + "title": "Case studies", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "publisher categories" + ] + }, + { + "url": "https://www.aditude.com/case-studies/dexerto", + "title": "Dexerto case", + "kind": "vendor_case_study", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "reported lift; no entry data" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/1ozpww8", + "title": "Visual design app ad discussion", + "kind": "publisher_forum", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "1.1m monthly GA users; reliability concerns" + ] + }, + { + "url": "https://www.aditude.com/contact", + "title": "Publisher contact", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "sales-led contact route" + ] + } + ], + "checkedAt": "2026-10-22" + }, + { + "slug": "adnimation", + "productType": "Managed ad monetization plus a separate self-serve MAP program", + "applicationUrl": "https://www.adnimation.com/get-started/", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Pay day", + "value": "Net 35", + "note": "Standard managed service; MAP has separate terms.", + "sourceUrl": "https://www.adnimation.com/faqs/" + } + ], + "joining": [ + { + "label": "Standard traffic", + "value": "Substantial; no official number.", + "note": "CEO described 1–20m monthly visitors as a historical sweet spot, not a cutoff.", + "sourceUrl": "https://www.adnimation.com/adnimation-co-founder-talks-plans-for-growth-with-mergermarket/" + }, + { + "label": "MAP traffic", + "value": "No PV minimum; all sites reviewed.", + "sourceUrl": "https://www.adnimation.com/map/" + }, + { + "label": "Content", + "value": "No gambling, pornography, drugs or similar content.", + "sourceUrl": "https://www.adnimation.com/faqs/" + }, + { + "label": "Payment methods", + "value": "US ACH; international wire; PayPal by arrangement.", + "sourceUrl": "https://www.adnimation.com/faqs/" + } + ], + "revenueShare": "Revenue-share model; percentage not public", + "paymentTerms": "Net 35 after month end", + "paymentThreshold": null, + "paymentMethods": [ + "ACH (US)", + "International wire", + "PayPal by arrangement" + ], + "sources": [ + { + "label": "Publisher FAQ", + "url": "https://www.adnimation.com/faqs/" + }, + { + "label": "MAP program", + "url": "https://www.adnimation.com/map/" + }, + { + "label": "Co-founder interview", + "url": "https://www.adnimation.com/adnimation-co-founder-talks-plans-for-growth-with-mergermarket/" + }, + { + "label": "Case study", + "url": "https://www.adnimation.com/case-study/" + } + ] + }, + "fit": { + "publisherTypes": [ + "established web, app and CTV publishers", + "smaller publishers using MAP" + ], + "nichesStrong": [ + "original content", + "news", + "automotive", + "US foreign-language audiences" + ], + "nichesWeak": [ + "very small sites for standard service" + ], + "geographies": [ + "Global; historical interview said 65% of customers were US-based" + ], + "role": "infrastructure", + "entryPositioning": "Separate paths: standard service asks for substantial traffic; MAP has no PV floor but manually reviews all sites.", + "compatibilityNotes": [ + "Standard service allows direct campaigns to continue; confirm other-network exclusivity.", + "MAP payment terms are separate." + ] + }, + "officialRequirements": [ + { + "metric": "Traffic", + "comparator": "substantial; no number", + "amount": null, + "unit": "not stated", + "period": "not stated", + "scope": "standard managed sites", + "program": "Standard", + "sourceUrl": "https://www.adnimation.com/faqs/", + "note": null + }, + { + "metric": "Traffic", + "comparator": "no minimum", + "amount": 0, + "unit": "pageviews", + "period": "not stated", + "scope": "all site sizes subject to review", + "program": "MAP", + "sourceUrl": "https://www.adnimation.com/map/", + "note": null + }, + { + "metric": "Content", + "comparator": "must exclude", + "amount": null, + "unit": "gambling/porn/drugs and similar", + "period": "ongoing", + "scope": "site/app/CTV", + "program": "Standard", + "sourceUrl": "https://www.adnimation.com/faqs/", + "note": null + } + ], + "observations": [ + { + "sourceUrl": "https://www.adnimation.com/adnimation-co-founder-talks-plans-for-growth-with-mergermarket/", + "publishedAt": null, + "site": "Aggregate customer base", + "niche": "Original-content sites; examples include conservative news, automotive and Mandarin publishers", + "traffic": { + "value": 1000000, + "metric": "monthly visitors", + "period": "lower end of quoted customer sweet spot" + }, + "adRevenueMonthlyUsd": null, + "countries": [ + "United States" + ], + "decision": "Co-founder described 1–20m monthly visitors as sweet spot and 65% of customers in US.", + "limits": "Company interview circa 2022; positioning, not admission floor." + }, + { + "sourceUrl": "https://www.adnimation.com/case-study/", + "publishedAt": null, + "site": "Unnamed conservative news site", + "niche": "Conservative news", + "traffic": { + "value": 1000000, + "metric": "monthly users", + "period": "site reached scale before engagement" + }, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "Company case says the site exceeded 1m monthly users before monetization engagement.", + "limits": "Vendor case, not an entrant threshold." + } + ], + "inference": { + "trafficRange": { + "low": 1000000, + "high": 20000000, + "metric": "visitors", + "period": "month", + "basisSourceUrls": [ + "https://www.adnimation.com/adnimation-co-founder-talks-plans-for-growth-with-mergermarket/" + ], + "confidence": "low", + "note": "Historical vendor interview sweet spot, not admission range." + }, + "revenueRange": null, + "practicalFit": "Standard service is plausible for established sites around the historical 1–20m visitor sweet spot. MAP is a lower-volume route with no PV minimum, subject to review.", + "currentNetworkSignals": [ + "GAM/header-bidding experience can support implementation but does not prove acceptance." + ], + "geographyPreference": "Global; historical interview says US publishers were a majority, including foreign-language US audiences.", + "agePreference": "No site-age minimum found.", + "confidence": "low", + "rationale": "Official FAQ confirms substantial traffic and MAP without PV minimum; the 1–20m band is dated company positioning only.", + "supportingSourceUrls": [ + "https://www.adnimation.com/faqs/", + "https://www.adnimation.com/map/", + "https://www.adnimation.com/adnimation-co-founder-talks-plans-for-growth-with-mergermarket/" + ], + "gaps": [ + "No current standard-service threshold or country-share rule.", + "No independent first-person application case with dated metrics found.", + "Verify MAP-specific payment terms separately." + ] + }, + "sources": [ + { + "url": "https://www.adnimation.com/faqs/", + "title": "Publisher FAQ", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "substantial traffic", + "content exclusions", + "Net+35", + "revenue share" + ] + }, + { + "url": "https://www.adnimation.com/map/", + "title": "MAP program", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "no PV floor", + "manual review" + ] + }, + { + "url": "https://www.adnimation.com/adnimation-co-founder-talks-plans-for-growth-with-mergermarket/", + "title": "Co-founder interview", + "kind": "company_interview", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "1–20m monthly visitors sweet spot", + "65% US mix; not admission rule" + ] + }, + { + "url": "https://www.adnimation.com/case-study/", + "title": "Publisher case study", + "kind": "vendor_case_study", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "conservative-news niche and scale" + ] + } + ], + "checkedAt": "2026-10-22" + }, + { + "slug": "adpushup", + "productType": "Managed ad-revenue optimization and header-bidding platform", + "applicationUrl": "https://www.adpushup.com/publisher/get-started/", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Vendor-published revenue signal", + "value": "$3,000/month", + "note": "Soft signal in vendor small-publisher article; current onboarding does not confirm it as a hard gate.", + "sourceUrl": "https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/" + }, + { + "label": "Payment minimum", + "value": "$50", + "note": "Publisher terms last revised April 20, 2021; verify current offer.", + "sourceUrl": "https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf" + }, + { + "label": "Pay day", + "value": "Net 45", + "note": "2021-revised terms; verify current offer.", + "sourceUrl": "https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "No confirmed current minimum.", + "note": "Vendor article says no PV minimum; onboarding page is silent.", + "sourceUrl": "https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/" + }, + { + "label": "Revenue", + "value": "About $3k/month is cited in vendor eligibility article.", + "note": "Not confirmed by current application route.", + "sourceUrl": "https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/" + }, + { + "label": "Application", + "value": "Submit site for review and install approved code.", + "sourceUrl": "https://www.adpushup.com/publisher/get-started/" + } + ], + "revenueShare": "Separate publisher agreement sets share; not public", + "paymentTerms": "Net 45 under 2021 terms", + "paymentThreshold": "$50 under 2021 terms", + "paymentMethods": [ + "Direct deposit", + "Wire transfer", + "PayPal" + ], + "sources": [ + { + "label": "Onboarding", + "url": "https://www.adpushup.com/publisher/get-started/" + }, + { + "label": "Small-publisher article", + "url": "https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/" + }, + { + "label": "Terms (revised 2021)", + "url": "https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf" + } + ] + }, + "fit": { + "publisherTypes": [ + "established content publishers seeking managed optimization" + ], + "nichesStrong": [ + "developer/technical", + "media", + "consumer content" + ], + "nichesWeak": [ + "very low-volume blogs without material ad revenue" + ], + "geographies": [ + "No public country mix" + ], + "role": "infrastructure", + "entryPositioning": "Application-led optimization service. A vendor article mentions $3k/month revenue, but current onboarding does not verify a minimum.", + "compatibilityNotes": [ + "Designed to optimize existing demand; check current agreement for same-slot competition/exclusivity." + ] + }, + "officialRequirements": [ + { + "metric": "Traffic", + "comparator": "not confirmed by current onboarding", + "amount": null, + "unit": "not stated", + "period": "not stated", + "scope": "publisher sites", + "program": "Publisher service", + "sourceUrl": "https://www.adpushup.com/publisher/get-started/", + "note": null + }, + { + "metric": "Ad revenue", + "comparator": "vendor article mentions", + "amount": 3000, + "unit": "USD", + "period": "month", + "scope": "small publisher discussion", + "program": "Vendor article", + "sourceUrl": "https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/", + "note": "Not confirmed as current hard minimum." + }, + { + "metric": "Content", + "comparator": "must not contain", + "amount": null, + "unit": "illegal/pornographic/hateful/fraudulent/infringing material", + "period": "ongoing", + "scope": "approved sites", + "program": "Publisher terms", + "sourceUrl": "https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf", + "note": null + } + ], + "observations": [], + "inference": { + "trafficRange": null, + "revenueRange": { + "low": 3000, + "high": 3000, + "metric": "USD ad revenue", + "period": "month", + "basisSourceUrls": [ + "https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/" + ], + "confidence": "low", + "note": "One vendor article; current onboarding does not confirm minimum." + }, + "practicalFit": "Compare when a publisher already earns material display revenue and wants managed testing/header bidding. Treat $3k/month only as a vendor-published soft signal.", + "currentNetworkSignals": [ + "Existing ad partners are context, not proof of entry." + ], + "geographyPreference": "No public country or audience mix.", + "agePreference": "No public age rule.", + "confidence": "low", + "rationale": "Current onboarding is sales-led; public terms are revised 2021 and the only revenue signal is a vendor article.", + "supportingSourceUrls": [ + "https://www.adpushup.com/publisher/get-started/", + "https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/" + ], + "gaps": [ + "No reliable dated first-person application case found.", + "Payment terms are dated April 2021; verify current offer.", + "No current traffic, geography or revenue-share rule." + ] + }, + "sources": [ + { + "url": "https://www.adpushup.com/publisher/get-started/", + "title": "Publisher onboarding", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "application route", + "managed optimization" + ] + }, + { + "url": "https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/", + "title": "Small-publisher article", + "kind": "vendor_article", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "$3,000/month signal and no PV minimum; not confirmed by current onboarding" + ] + }, + { + "url": "https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf", + "title": "Publisher terms", + "kind": "official_terms", + "publishedAt": "2021-04-20", + "checkedAt": "2026-10-22", + "claims": [ + "minimum, payout and content terms; separate share agreement" + ] + }, + { + "url": "https://adxdesk.com/blog/adpushup-review/", + "title": "Publisher roster analysis", + "kind": "independent_analysis", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "sellers.json footprint, not visits or acceptance" + ] + } + ], + "checkedAt": "2026-10-22" + }, + { + "slug": "amazon-publisher-services", + "checkedAt": "2026-10-22", + "productType": "Invitation-only server-side header-bidding marketplace (UAM)", + "applicationUrl": "https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "UAM fee", + "value": "10%", + "note": "Stated in 2023 FAQ; verify because current page does not repeat the rate.", + "sourceUrl": "https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf" + }, + { + "label": "Payment minimum", + "value": "$5 USD", + "note": "Current UAM product page confirms.", + "sourceUrl": "https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html" + }, + { + "label": "Pay day", + "value": "Net 60", + "note": "Current UAM product page confirms.", + "sourceUrl": "https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html" + } + ], + "joining": [ + { + "label": "Application", + "value": "Invitation only; approved invite code and site.", + "sourceUrl": "https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html" + }, + { + "label": "Must connect", + "value": "Google Ad Manager; publisher directly or exclusively represents the site.", + "sourceUrl": "https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html" + }, + { + "label": "Geography", + "value": "Worldwide availability; bidder demand varies by country.", + "sourceUrl": "https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html" + } + ], + "revenueShare": null, + "paymentTerms": "Net 60", + "paymentThreshold": "$5 USD", + "paymentMethods": [], + "sources": [ + { + "label": "Current UAM page", + "url": "https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html" + }, + { + "label": "UAM FAQ / fee terms", + "url": "https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf" + } + ] + }, + "fit": { + "publisherTypes": [ + "established web publishers using GAM and directly representing their site" + ], + "nichesStrong": [ + "news", + "large content publishers", + "header-bidding operations" + ], + "nichesWeak": [ + "new blogs without GAM" + ], + "geographies": [ + "Worldwide; demand varies" + ], + "role": "supplemental", + "entryPositioning": "Invitation-only demand layer; not an open beginner network.", + "compatibilityNotes": [ + "Official UAM FAQ allows use beside other header-bidding wrappers." + ] + }, + "officialRequirements": [ + { + "metric": "Invitation", + "comparator": "required", + "amount": null, + "unit": "invite", + "period": "before onboarding", + "scope": "approved site", + "program": "UAM", + "sourceUrl": "https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf", + "note": null + }, + { + "metric": "Publisher relationship", + "comparator": "must directly/exclusively represent", + "amount": null, + "unit": "site inventory", + "period": "ongoing", + "scope": "publisher", + "program": "UAM", + "sourceUrl": "https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf", + "note": null + }, + { + "metric": "Ad server", + "comparator": "requires", + "amount": null, + "unit": "Google Ad Manager", + "period": "ongoing", + "scope": "web publisher", + "program": "UAM", + "sourceUrl": "https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf", + "note": null + }, + { + "metric": "Traffic", + "comparator": "not published", + "amount": null, + "unit": "not stated", + "period": "not stated", + "scope": "publisher site", + "program": "UAM", + "sourceUrl": "https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html", + "note": null + } + ], + "observations": [ + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/v0ec6t", + "publishedAt": "2022", + "site": "Unidentified publisher", + "niche": "Not stated", + "traffic": { + "value": 45000000, + "metric": "monthly US pageviews", + "period": "month" + }, + "adRevenueMonthlyUsd": null, + "countries": [ + "United States" + ], + "decision": "Reported applying for UAM invitation and no reply after about three weeks.", + "limits": "Anonymous single applicant, no final outcome; not an entry floor." + }, + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/1mss9ei", + "publishedAt": "2025", + "site": "Unidentified publisher", + "niche": "Not stated", + "traffic": null, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "Reported using TAM/UAM with good results.", + "limits": "No traffic, revenue or application details." + } + ], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Shortlist only after checking invitation, GAM readiness and direct representation. Most small publishers cannot act on it immediately.", + "currentNetworkSignals": [ + "Compatible with other wrappers; existing network use does not prove an invite." + ], + "geographyPreference": "Worldwide, with country-dependent demand.", + "agePreference": "No public age rule found.", + "confidence": "medium", + "rationale": "Official terms establish invitation, GAM and compatibility but no traffic floor; one 45m-US-PV applicant waited without response.", + "supportingSourceUrls": [ + "https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html", + "https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf", + "https://www.reddit.com/r/adops/comments/v0ec6t" + ], + "gaps": [ + "No verified accepted publisher example with niche and traffic.", + "Fee source is from 2023 and should be confirmed in current agreement." + ] + }, + "sources": [ + { + "url": "https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html", + "title": "Current UAM page", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "invite", + "GAM", + "global availability", + "Net60 and $5" + ] + }, + { + "url": "https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf", + "title": "UAM FAQ", + "kind": "official_document", + "publishedAt": "2023-01", + "checkedAt": "2026-10-22", + "claims": [ + "10% transaction fee", + "invitation/GAM/compatibility" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/v0ec6t", + "title": "UAM applicant report", + "kind": "publisher_forum", + "publishedAt": "2022", + "checkedAt": "2026-10-22", + "claims": [ + "45m monthly US PV; no response after about three weeks" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/1mss9ei", + "title": "TAM/UAM use", + "kind": "publisher_forum", + "publishedAt": "2025", + "checkedAt": "2026-10-22", + "claims": [ + "unquantified positive use" + ] + } + ] + }, + { + "slug": "anymind-anymanager", + "checkedAt": "2026-10-22", + "productType": "Publisher ad monetization, ad serving and demand aggregation for web and apps", + "applicationUrl": "https://anymindgroup.com/contact/", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [], + "joining": [ + { + "label": "Product fit", + "value": "Web/app monetization with 150+ ad-serving partners, SDK, video and PMP.", + "sourceUrl": "https://anymindgroup.com/products/anymanager/" + }, + { + "label": "Application", + "value": "Contact AnyMind; no self-serve entry gate found.", + "sourceUrl": "https://anymindgroup.com/products/anymanager/" + }, + { + "label": "Regional fit", + "value": "APAC is the clearest published focus; broader coverage also offered.", + "sourceUrl": "https://anymindgroup.com/case-study/?business=publishergrowth&pa=2" + } + ], + "revenueShare": "Fixed percentage agreed per publisher; not public", + "paymentTerms": null, + "paymentThreshold": null, + "paymentMethods": [], + "sources": [ + { + "label": "AnyManager product", + "url": "https://anymindgroup.com/products/anymanager/" + }, + { + "label": "Publisher cases", + "url": "https://anymindgroup.com/case-study/?business=publishergrowth&pa=2" + }, + { + "label": "AnyManager terms", + "url": "https://anymanager.io/terms-of-service/" + } + ] + }, + "fit": { + "publisherTypes": [ + "web and app publishers with programmatic needs" + ], + "nichesStrong": [ + "news/media", + "gaming/apps", + "APAC publishers" + ], + "nichesWeak": [ + "small sites wanting self-serve and public payout terms" + ], + "geographies": [ + "APAC emphasis; platform supports broader markets" + ], + "role": "infrastructure", + "entryPositioning": "Contact-led commercial platform; no public traffic/revenue gate.", + "compatibilityNotes": [ + "Aggregates demand; exclusivity and share are set in private terms." + ] + }, + "officialRequirements": [ + { + "metric": "Traffic", + "comparator": "not published", + "amount": null, + "unit": "not stated", + "period": "not stated", + "scope": "web/app publishers", + "program": "AnyManager", + "sourceUrl": "https://anymindgroup.com/products/anymanager/", + "note": null + }, + { + "metric": "Revenue share", + "comparator": "per-publisher commercial terms", + "amount": null, + "unit": "percentage", + "period": "contract", + "scope": "each publisher", + "program": "AnyManager", + "sourceUrl": "https://anymanager.io/terms-of-service/", + "note": null + }, + { + "metric": "Integration", + "comparator": "requires", + "amount": null, + "unit": "web tag or app SDK", + "period": "onboarding", + "scope": "publisher property", + "program": "AnyManager", + "sourceUrl": "https://anymindgroup.com/products/anymanager/", + "note": null + } + ], + "observations": [], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Consider APAC web/app publishers seeking managed demand and analytics, especially multi-property operators. Do not rank a small global blog highly without direct qualification.", + "currentNetworkSignals": [ + "Existing ad stack may ease integration; does not transfer acceptance." + ], + "geographyPreference": "APAC is clearest published regional emphasis; no country-level admission preference.", + "agePreference": "No public age rule found.", + "confidence": "low", + "rationale": "Official material describes product scope and individually negotiated terms; no quantified independent onboarding example located.", + "supportingSourceUrls": [ + "https://anymindgroup.com/products/anymanager/", + "https://anymindgroup.com/case-study/?business=publishergrowth&pa=2", + "https://anymanager.io/terms-of-service/" + ], + "gaps": [ + "Terms search result showed an Aug 24 2026 update but page redirected on open; confirm in signed contract.", + "No first-person application example with traffic, niche or geography.", + "No public payout floor, payment methods or site-age rule." + ] + }, + "sources": [ + { + "url": "https://anymindgroup.com/products/anymanager/", + "title": "AnyManager product page", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "web/app platform", + "150+ ad serving partners", + "SDK/video/PMP" + ] + }, + { + "url": "https://anymindgroup.com/case-study/?business=publishergrowth&pa=2", + "title": "Publisher case studies", + "kind": "vendor_case_study", + "publishedAt": "2025", + "checkedAt": "2026-10-22", + "claims": [ + "regional examples in Vietnam, Thailand and Japan; no eligibility threshold" + ] + }, + { + "url": "https://anymanager.io/terms-of-service/", + "title": "AnyManager terms", + "kind": "official_terms", + "publishedAt": "2026-08-24", + "checkedAt": "2026-10-22", + "claims": [ + "search excerpt says share/payment set per publisher; page redirected" + ] + }, + { + "url": "https://anymindgroup.com/ir/faq/", + "title": "Investor FAQ", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "fixed percentage individually agreed" + ] + } + ] + }, + { + "slug": "buysellads-carbon-ads", + "checkedAt": "2026-10-22", + "productType": "Invitation-only contextual ad marketplace for developer/design audiences", + "applicationUrl": "https://www.carbonads.net/join", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Withdrawal balance", + "value": "$1", + "note": "Method minimums: $20 PayPal, $50 check, $500 wire; fees may apply.", + "sourceUrl": "https://www.carbonads.net/faq" + }, + { + "label": "Revenue timing", + "value": "Posted within 30 days; withdrawable within 60 days", + "note": "Open Collective quarterly by request.", + "sourceUrl": "https://www.carbonads.net/faq" + } + ], + "joining": [ + { + "label": "Application", + "value": "Invite-only; review usually 5–7 business days.", + "note": "Reviews traffic, relevance, maintenance and capacity.", + "sourceUrl": "https://www.carbonads.net/faq" + }, + { + "label": "Audience", + "value": "English-speaking developer/design audience; US, Canada, Europe strongest.", + "note": "Other areas depend on demand.", + "sourceUrl": "https://www.carbonads.net/faq" + }, + { + "label": "Exclusivity", + "value": "Carbon must be the only ads on the site; no backfill.", + "note": "Replacement, not add-on.", + "sourceUrl": "https://www.carbonads.net/faq" + }, + { + "label": "Traffic", + "value": "Monthly pageviews reviewed; no fixed minimum.", + "sourceUrl": "https://www.carbonads.net/faq" + } + ], + "revenueShare": null, + "paymentTerms": "Earnings posted monthly within 30 days; withdrawal within 60 days", + "paymentThreshold": "$1 before method minimums", + "paymentMethods": [ + "PayPal", + "Check", + "Wire transfer", + "Open Collective, quarterly by request" + ], + "sources": [ + { + "label": "FAQ", + "url": "https://www.carbonads.net/faq" + }, + { + "label": "Join", + "url": "https://www.carbonads.net/join" + }, + { + "label": "About", + "url": "https://www.carbonads.net/about" + } + ] + }, + "fit": { + "publisherTypes": [ + "developer publishers", + "OSS product sites", + "technology/design publications" + ], + "nichesStrong": [ + "software development", + "web design", + "DevOps", + "developer tools" + ], + "nichesWeak": [ + "general lifestyle or unrelated non-English sites" + ], + "geographies": [ + "US/Canada/Europe strongest; other demand depends on market" + ], + "role": "primary", + "entryPositioning": "Curated invite-only niche network; reviews pageviews without a fixed published floor.", + "compatibilityNotes": [ + "Carbon-only ads across the site, with no other-network backfill; replacement only." + ] + }, + "officialRequirements": [ + { + "metric": "Invitation", + "comparator": "required", + "amount": null, + "unit": "invite", + "period": "before service", + "scope": "site", + "program": "Carbon", + "sourceUrl": "https://www.carbonads.net/faq", + "note": null + }, + { + "metric": "Audience", + "comparator": "must be relevant", + "amount": null, + "unit": "English developer/design audience", + "period": "ongoing", + "scope": "site audience", + "program": "Carbon", + "sourceUrl": "https://www.carbonads.net/faq", + "note": null + }, + { + "metric": "Traffic", + "comparator": "reviews", + "amount": null, + "unit": "monthly pageviews", + "period": "application", + "scope": "site", + "program": "Carbon", + "sourceUrl": "https://www.carbonads.net/faq", + "note": "No fixed cutoff published." + }, + { + "metric": "Exclusivity", + "comparator": "requires", + "amount": null, + "unit": "Carbon-only ads", + "period": "ongoing", + "scope": "entire site", + "program": "Carbon", + "sourceUrl": "https://www.carbonads.net/faq", + "note": null + } + ], + "observations": [], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Recommend only when niche fit is strong and publisher accepts site-wide exclusivity. Treat as display replacement, not incremental demand.", + "currentNetworkSignals": [ + "Current display provider conflicts with Carbon's exclusivity." + ], + "geographyPreference": "Developer/design audience; strongest demand in US, Canada and Europe.", + "agePreference": "No public age rule found.", + "confidence": "medium", + "rationale": "FAQ is specific about audience, review and exclusivity but gives no cutoff; targeted search found no first-person entry case.", + "supportingSourceUrls": [ + "https://www.carbonads.net/faq", + "https://www.carbonads.net/about" + ], + "gaps": [ + "No independent accepted/rejected case with traffic, niche and geography.", + "No numeric floor or revenue share.", + "Vendor CPM range omitted from revenue forecasts." + ] + }, + "sources": [ + { + "url": "https://www.carbonads.net/faq", + "title": "Current publisher FAQ", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "invite/review", + "audience/regions", + "no cutoff", + "exclusivity and payout" + ] + }, + { + "url": "https://www.carbonads.net/about", + "title": "About Carbon", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "curated tech/design inventory" + ] + }, + { + "url": "https://www.carbonads.net/join", + "title": "Publisher application", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "join route" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/1oxy825", + "title": "Partner comparison", + "kind": "publisher_forum", + "publishedAt": "2025", + "checkedAt": "2026-10-22", + "claims": [ + "community calls Carbon a dev/open-source niche; not entry evidence" + ] + } + ] + }, + { + "slug": "clickio", + "checkedAt": "2026-10-22", + "productType": "Managed display monetization and yield optimization", + "applicationUrl": "https://clickio.com/contact/", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Indicative traffic guide", + "value": "100,000–1,000,000 monthly pageviews", + "note": "Country-specific Fully Managed guide; not guaranteed approval.", + "sourceUrl": "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards" + }, + { + "label": "Below-guide route", + "value": ">$500 monthly ad revenue", + "note": "May require proof for 3 consecutive months.", + "sourceUrl": "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards" + }, + { + "label": "Pay day", + "value": "Net 60", + "note": "Some demand partners may offer Net30.", + "sourceUrl": "https://docs.clickio.com/books/get-started/page/payments-billing" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "100k PV UK/France/US/Australia/Canada; 250k Italy/Spain; 300k rest Europe; 500k Portugal; 750k Brazil/Colombia/Mexico; 1m rest LatAm/world.", + "note": "Indicative guide.", + "sourceUrl": "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards" + }, + { + "label": "Revenue alternative", + "value": ">$500 monthly ad revenue below regional guide.", + "note": "May require proof for 3 consecutive months.", + "sourceUrl": "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards" + }, + { + "label": "Verification", + "value": "Six months of GA reports may be used if other verification unavailable.", + "note": "Evidence window, not domain-age rule.", + "sourceUrl": "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards" + }, + { + "label": "Technical", + "value": "ads.txt, IAB-approved CMP, >50% viewability; follow AdSense policy.", + "sourceUrl": "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards" + } + ], + "revenueShare": "Variable by demand-partner tariff", + "paymentTerms": "Net 60; some demand partners Net30", + "paymentThreshold": "$100 ACH/eCheck/SEPA/check/PayPal; $200 wire; $10 WebMoney; GBP100 Payoneer", + "paymentMethods": [ + "ACH", + "eCheck", + "SEPA", + "Wire", + "Check", + "PayPal", + "WebMoney", + "Payoneer" + ], + "sources": [ + { + "label": "Entry standards", + "url": "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards" + }, + { + "label": "Payments", + "url": "https://docs.clickio.com/books/get-started/page/payments-billing" + }, + { + "label": "Publisher agreement", + "url": "https://legal.clickio.com/PublisherAgreement/" + } + ], + "joinSummary": "Country guide varies; below-guide route is >$500 monthly ad revenue, potentially verified across three months" + }, + "fit": { + "publisherTypes": [ + "content publishers with meaningful traffic in eligible countries" + ], + "nichesStrong": [ + "original editorial/content" + ], + "nichesWeak": [ + "very small sites without verifiable traffic or revenue" + ], + "geographies": [ + "100k PV in selected Tier1 markets; up to 1m in other regions" + ], + "role": "primary", + "entryPositioning": "Country-specific indicative traffic guide or >$500/month ad revenue alternative.", + "compatibilityNotes": [ + "Confirm managed-service exclusivity. Six months of analytics is verification evidence, not site age." + ] + }, + "officialRequirements": [ + { + "metric": "Monthly PV", + "comparator": "indicative", + "amount": 100000, + "unit": "pageviews", + "period": "month", + "scope": "UK, France, US, Australia, Canada", + "program": "Fully Managed", + "sourceUrl": "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards", + "note": null + }, + { + "metric": "Monthly PV", + "comparator": "indicative", + "amount": 250000, + "unit": "pageviews", + "period": "month", + "scope": "Italy, Spain", + "program": "Fully Managed", + "sourceUrl": "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards", + "note": null + }, + { + "metric": "Monthly PV", + "comparator": "indicative", + "amount": 300000, + "unit": "pageviews", + "period": "month", + "scope": "rest of Europe", + "program": "Fully Managed", + "sourceUrl": "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards", + "note": null + }, + { + "metric": "Monthly PV", + "comparator": "indicative", + "amount": 500000, + "unit": "pageviews", + "period": "month", + "scope": "Portugal", + "program": "Fully Managed", + "sourceUrl": "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards", + "note": null + }, + { + "metric": "Monthly PV", + "comparator": "indicative", + "amount": 750000, + "unit": "pageviews", + "period": "month", + "scope": "Brazil, Colombia, Mexico", + "program": "Fully Managed", + "sourceUrl": "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards", + "note": null + }, + { + "metric": "Monthly PV", + "comparator": "indicative", + "amount": 1000000, + "unit": "pageviews", + "period": "month", + "scope": "rest of Latin America and world", + "program": "Fully Managed", + "sourceUrl": "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards", + "note": null + }, + { + "metric": "Ad revenue", + "comparator": "alternative; greater than", + "amount": 500, + "unit": "USD", + "period": "month", + "scope": "below regional PV guide", + "program": "Fully Managed", + "sourceUrl": "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards", + "note": "May require three consecutive months of proof." + }, + { + "metric": "Viewability", + "comparator": "ongoing minimum", + "amount": 50, + "unit": "percent", + "period": "ongoing", + "scope": "served inventory", + "program": "Fully Managed", + "sourceUrl": "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards", + "note": null + } + ], + "observations": [ + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/vi0i7e", + "publishedAt": "2022", + "site": "Unidentified site", + "niche": "Not stated", + "traffic": null, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "Poster said they used Clickio while evaluating emerging-market demand and described more ads than AdSense.", + "limits": "No traffic, revenue, country split or application decision." + } + ], + "inference": { + "trafficRange": { + "low": 100000, + "high": 1000000, + "metric": "pageviews", + "period": "month", + "basisSourceUrls": [ + "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards" + ], + "confidence": "high", + "note": "Indicative regional guide, not guaranteed approval." + }, + "revenueRange": null, + "practicalFit": "Shortlist when the audience geography matches official guidance or the site can document >$500 monthly revenue; do not collapse country bars into one global floor.", + "currentNetworkSignals": [ + "Other network membership is not evidence of Clickio approval." + ], + "geographyPreference": "Country-specific: selected Tier1 markets at 100k PV; some regions at 1m.", + "agePreference": "No age minimum; six months of reports is one traffic verification option.", + "confidence": "high", + "rationale": "Official standards give regional PV values, a revenue route and technical rules; one forum account confirms use but has no metrics.", + "supportingSourceUrls": [ + "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards", + "https://docs.clickio.com/books/get-started/page/payments-billing", + "https://www.reddit.com/r/adops/comments/vi0i7e" + ], + "gaps": [ + "Regional numbers are indicative, not guaranteed.", + "No dated first-person outcome with exact traffic.", + "Six months of analytics is not a site-age requirement." + ] + }, + "sources": [ + { + "url": "https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards", + "title": "Clickio entry standards", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "regional pageview guidance", + "$500 alternative", + "verification/policy/CMP/viewability" + ] + }, + { + "url": "https://docs.clickio.com/books/get-started/page/payments-billing", + "title": "Payments help", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "Net60 and method thresholds" + ] + }, + { + "url": "https://legal.clickio.com/PublisherAgreement/", + "title": "Publisher agreement", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "payment schedule options" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/vi0i7e", + "title": "Publisher Clickio discussion", + "kind": "publisher_forum", + "publishedAt": "2022", + "checkedAt": "2026-10-22", + "claims": [ + "one use report with no metrics" + ] + } + ] + }, + { + "slug": "concert", + "checkedAt": "2026-10-22", + "productType": "Publisher-led curated SSP and premium marketplace", + "applicationUrl": "https://www.voxmedia.com/brands/concert", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [], + "joining": [ + { + "label": "Product", + "value": "Publisher-led curated SSP for premium publisher inventory.", + "sourceUrl": "https://www.voxmedia.com/2022/6/7/23157157/vox-media-concert-ssp-publisher-led-supply-side-platform-trade-desk-as-an-exclusive-launch-partner/" + }, + { + "label": "Application", + "value": "No public publisher form or qualification page found.", + "note": "Available terms were advertiser-facing.", + "sourceUrl": "https://admanager.concert.io/terms" + }, + { + "label": "Publisher fit", + "value": "Launch examples are established media groups; examples are not an admission minimum.", + "sourceUrl": "https://www.voxmedia.com/about-vox-media/2018/5/31/17413008/top-digital-publishers-join-concert-to-create-largest-premium-advertising-marketplace-online/" + } + ], + "revenueShare": null, + "paymentTerms": null, + "paymentThreshold": null, + "paymentMethods": [], + "sources": [ + { + "label": "SSP launch", + "url": "https://www.voxmedia.com/2022/6/7/23157157/vox-media-concert-ssp-publisher-led-supply-side-platform-trade-desk-as-an-exclusive-launch-partner/" + }, + { + "label": "Publisher group", + "url": "https://www.voxmedia.com/about-vox-media/2018/5/31/17413008/top-digital-publishers-join-concert-to-create-largest-premium-advertising-marketplace-online/" + }, + { + "label": "Advertiser terms", + "url": "https://admanager.concert.io/terms" + } + ] + }, + "fit": { + "publisherTypes": [ + "premium media groups", + "established digital publishers" + ], + "nichesStrong": [ + "news", + "culture", + "entertainment", + "editorial" + ], + "nichesWeak": [ + "solo blogs seeking an open network" + ], + "geographies": [ + "No public publisher geo criteria" + ], + "role": "sales_collective", + "entryPositioning": "Curated publisher-led SSP; no public self-serve route or entry gate.", + "compatibilityNotes": [ + "SSP access is a sales relationship, not a generic extra tag.", + "Advertiser terms do not establish publisher eligibility." + ] + }, + "officialRequirements": [ + { + "metric": "Publisher application", + "comparator": "not public", + "amount": null, + "unit": "not stated", + "period": "not stated", + "scope": "publisher inventory", + "program": "Concert", + "sourceUrl": "https://www.voxmedia.com/2022/6/7/23157157/vox-media-concert-ssp-publisher-led-supply-side-platform-trade-desk-as-an-exclusive-launch-partner/", + "note": null + }, + { + "metric": "Traffic/revenue", + "comparator": "not public", + "amount": null, + "unit": "not stated", + "period": "not stated", + "scope": "publisher", + "program": "Concert", + "sourceUrl": "https://www.voxmedia.com/2022/6/7/23157157/vox-media-concert-ssp-publisher-led-supply-side-platform-trade-desk-as-an-exclusive-launch-partner/", + "note": null + } + ], + "observations": [], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Do not recommend as a routine solo-publisher application. Relevant to established media groups pursuing curated marketplace or sales relationships.", + "currentNetworkSignals": [], + "geographyPreference": "No public country rule found.", + "agePreference": "No public age minimum found.", + "confidence": "low", + "rationale": "Announcements and trade coverage show curated positioning, but no publisher policy or first-person application story was found.", + "supportingSourceUrls": [ + "https://www.voxmedia.com/2022/6/7/23157157/vox-media-concert-ssp-publisher-led-supply-side-platform-trade-desk-as-an-exclusive-launch-partner/", + "https://www.marketingbrew.com/stories/2022/10/19/why-vox-media-continues-to-invest-in-ad-tech" + ], + "gaps": [ + "No public publisher application, gate, payout terms or publisher agreement.", + "Available terms were advertiser-facing and not used to infer eligibility." + ] + }, + "sources": [ + { + "url": "https://www.voxmedia.com/2022/6/7/23157157/vox-media-concert-ssp-publisher-led-supply-side-platform-trade-desk-as-an-exclusive-launch-partner/", + "title": "Vox Concert SSP launch", + "kind": "official_publisher_announcement", + "publishedAt": "2022-06-07", + "checkedAt": "2026-10-22", + "claims": [ + "publisher-led curated SSP" + ] + }, + { + "url": "https://www.voxmedia.com/about-vox-media/2018/5/31/17413008/top-digital-publishers-join-concert-to-create-largest-premium-advertising-marketplace-online/", + "title": "Concert publisher group announcement", + "kind": "official_publisher_announcement", + "publishedAt": "2018-05-31", + "checkedAt": "2026-10-22", + "claims": [ + "established member examples" + ] + }, + { + "url": "https://www.marketingbrew.com/stories/2022/10/19/why-vox-media-continues-to-invest-in-ad-tech", + "title": "Trade coverage", + "kind": "independent_trade_press", + "publishedAt": "2022-10-19", + "checkedAt": "2026-10-22", + "claims": [ + "programmatic path; no open enrollment" + ] + }, + { + "url": "https://admanager.concert.io/terms", + "title": "Ad Manager terms", + "kind": "official_advertiser_terms", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "advertiser-facing" + ] + } + ] + }, + { + "slug": "ethicalads", + "checkedAt": "2026-10-22", + "productType": "Contextual developer-focused ad network", + "applicationUrl": "https://www.ethicalads.io/publishers/", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Traffic", + "value": "50,000 monthly pageviews", + "note": "Exceptions may be considered for close/fast-growing high-quality developer sites.", + "sourceUrl": "https://www.ethicalads.io/publishers/faq/" + }, + { + "label": "Share", + "value": "70%", + "note": "Published publisher policy.", + "sourceUrl": "https://www.ethicalads.io/publisher-policy/" + }, + { + "label": "Payment minimum", + "value": "$50", + "note": "Monthly target by the 15th.", + "sourceUrl": "https://www.ethicalads.io/publisher-policy/" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "At least 50k PV/month; discretionary exception path for close-fit developer sites.", + "sourceUrl": "https://www.ethicalads.io/publishers/faq/" + }, + { + "label": "Audience", + "value": "Developer-focused: software, OSS, DevOps, security, data science.", + "sourceUrl": "https://www.ethicalads.io/publisher-guide/" + }, + { + "label": "Placement", + "value": "One EthicalAds placement per page; no simultaneous competing ad on that page.", + "sourceUrl": "https://www.ethicalads.io/publisher-policy/" + }, + { + "label": "Payment", + "value": "70% share; $50 threshold; target by 15th.", + "sourceUrl": "https://www.ethicalads.io/publisher-policy/" + } + ], + "revenueShare": "70%", + "paymentTerms": "Monthly, target by 15th", + "paymentThreshold": "$50", + "paymentMethods": [ + "PayPal", + "Open Collective", + "GitHub Sponsors", + "Stripe Connect/bank transfer" + ], + "sources": [ + { + "label": "FAQ", + "url": "https://www.ethicalads.io/publishers/faq/" + }, + { + "label": "Policy", + "url": "https://www.ethicalads.io/publisher-policy/" + }, + { + "label": "Guide", + "url": "https://www.ethicalads.io/publisher-guide/" + }, + { + "label": "Terms", + "url": "https://www.ethicalads.io/terms-of-service/" + } + ] + }, + "fit": { + "publisherTypes": [ + "developer and OSS publishers" + ], + "nichesStrong": [ + "software", + "open source", + "DevOps", + "security", + "data science" + ], + "nichesWeak": [ + "general lifestyle sites without technical audience" + ], + "geographies": [ + "North America and Europe strongest; Australia/NZ possible" + ], + "role": "supplemental", + "entryPositioning": "50k monthly pageview threshold with discretionary exceptions for close-fit developer sites.", + "compatibilityNotes": [ + "Different pages/requests may use other providers; no competing ad on the same page." + ] + }, + "officialRequirements": [ + { + "metric": "Traffic", + "comparator": "minimum", + "amount": 50000, + "unit": "pageviews", + "period": "month", + "scope": "developer sites", + "program": "Publisher program", + "sourceUrl": "https://www.ethicalads.io/publishers/faq/", + "note": "High-quality fast-growing sites may be considered below." + }, + { + "metric": "Content", + "comparator": "must fit developer audience and policy", + "amount": null, + "unit": "site content", + "period": "ongoing", + "scope": "site", + "program": "Publisher program", + "sourceUrl": "https://www.ethicalads.io/publisher-guide/", + "note": null + }, + { + "metric": "Ad placement", + "comparator": "maximum", + "amount": 1, + "unit": "EthicalAds ad", + "period": "per page", + "scope": "publisher page", + "program": "Publisher program", + "sourceUrl": "https://www.ethicalads.io/publisher-policy/", + "note": null + }, + { + "metric": "Publisher share", + "comparator": "share", + "amount": 70, + "unit": "percent", + "period": "applicable revenue", + "scope": "publisher", + "program": "Publisher program", + "sourceUrl": "https://www.ethicalads.io/publisher-policy/", + "note": null + } + ], + "observations": [], + "inference": { + "trafficRange": { + "low": 50000, + "high": 50000, + "metric": "pageviews", + "period": "month", + "basisSourceUrls": [ + "https://www.ethicalads.io/publishers/faq/" + ], + "confidence": "high", + "note": "Official threshold; exceptions possible." + }, + "revenueRange": null, + "practicalFit": "Strong supplemental choice for technical sites near/above 50k PV/month. Below that, an exception is discretionary and should not be treated as routine.", + "currentNetworkSignals": [ + "Can coexist on separate pages/requests; no same-page competing ads." + ], + "geographyPreference": "North America/Europe strongest; Australia/NZ may work.", + "agePreference": "No public age minimum found.", + "confidence": "medium", + "rationale": "Official threshold and placement facts are clear; no reliable dated publisher acceptance story found.", + "supportingSourceUrls": [ + "https://www.ethicalads.io/publishers/faq/", + "https://www.ethicalads.io/publisher-policy/", + "https://www.ethicalads.io/publisher-guide/" + ], + "gaps": [ + "No dated firsthand acceptance/rejection with traffic, niche and geography.", + "CPM statements omitted from forecasts.", + "No age or tier-1 share gate." + ] + }, + "sources": [ + { + "url": "https://www.ethicalads.io/publishers/faq/", + "title": "Publisher FAQ", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "50k threshold and exceptions" + ] + }, + { + "url": "https://www.ethicalads.io/publisher-policy/", + "title": "Publisher policy", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "70% share", + "$50 minimum", + "monthly timing and placement" + ] + }, + { + "url": "https://www.ethicalads.io/publisher-guide/", + "title": "Publisher guide", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "technical audience fit" + ] + }, + { + "url": "https://www.ethicalads.io/terms-of-service/", + "title": "Terms", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "publisher policy" + ] + } + ] + }, + { + "slug": "ezoic", + "checkedAt": "2026-10-22", + "productType": "Managed ad monetization with integration and Incubator path", + "applicationUrl": "https://www.ezoic.com/get-started/", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "New-site gate", + "value": "250,000 monthly active users", + "note": "MAU, not PV or sessions.", + "sourceUrl": "https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES" + }, + { + "label": "Share", + "value": "At least 82%", + "note": "Net display-ad revenue unless separate agreement.", + "sourceUrl": "https://www.ezoic.com/terms" + }, + { + "label": "Payment minimum", + "value": "$20", + "note": "Published terms.", + "sourceUrl": "https://www.ezoic.com/terms" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "New sites generally need 250k MAU; do not convert to PV/sessions.", + "sourceUrl": "https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES" + }, + { + "label": "Incubator", + "value": "Up to 20 sites/month; discretionary review based on growth, site value, backend quality and publisher profile.", + "sourceUrl": "https://support.ezoic.com/kb/article/ezoic-incubator-program" + }, + { + "label": "Grandfathering", + "value": "Sites monetizing before 2026-02-19 may retain access with continuous integration; >7-day removal can end status.", + "sourceUrl": "https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES" + }, + { + "label": "Content/tech", + "value": "Original supported-language content, Google policies and JavaScript integration; AdSense approval generally not required.", + "sourceUrl": "https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES" + } + ], + "revenueShare": "At least 82% of net display-ad revenue", + "paymentTerms": "About 35 days after advertiser payment; payment help also describes Net30 and optional longer cycles", + "paymentThreshold": "$20", + "paymentMethods": [ + "Wise", + "PayPal", + "Payoneer", + "Check" + ], + "sources": [ + { + "label": "Requirements", + "url": "https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES" + }, + { + "label": "Incubator", + "url": "https://support.ezoic.com/kb/article/ezoic-incubator-program" + }, + { + "label": "Terms", + "url": "https://www.ezoic.com/terms" + }, + { + "label": "Payment help", + "url": "https://support.ezoic.com/kb/article/ezoic-payment-schedule-and-thresholds" + } + ], + "joinSummary": "250k monthly active users for new sites; limited Incubator below gate" + }, + "fit": { + "publisherTypes": [ + "established sites with analytics", + "selected small sites with exceptional growth potential" + ], + "nichesStrong": [ + "blogs", + "news", + "web tools" + ], + "nichesWeak": [ + "new low-MAU sites outside Incubator" + ], + "geographies": [ + "No numeric mix published" + ], + "role": "primary", + "entryPositioning": "250k MAU for new sites; Incubator below gate is limited and discretionary.", + "compatibilityNotes": [ + "Typically manages display setup; verify current setup before switching.", + "Grandfathered access does not transfer to a newly added site." + ] + }, + "officialRequirements": [ + { + "metric": "Monthly active users", + "comparator": "minimum", + "amount": 250000, + "unit": "MAU", + "period": "month", + "scope": "new sites", + "program": "Ezoic", + "sourceUrl": "https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES", + "note": null + }, + { + "metric": "Incubator capacity", + "comparator": "limited selection", + "amount": 20, + "unit": "sites", + "period": "month", + "scope": "below general gate", + "program": "Incubator", + "sourceUrl": "https://support.ezoic.com/kb/article/ezoic-incubator-program", + "note": null + }, + { + "metric": "Google policy", + "comparator": "must comply", + "amount": null, + "unit": "Google publisher policies", + "period": "ongoing", + "scope": "all sites", + "program": "Ezoic", + "sourceUrl": "https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES", + "note": null + }, + { + "metric": "Grandfathering", + "comparator": "continuous integration required", + "amount": null, + "unit": "integration", + "period": "ongoing", + "scope": "pre-2026-02-19 sites", + "program": "Ezoic", + "sourceUrl": "https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES", + "note": null + } + ], + "observations": [ + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/1ftuclz", + "publishedAt": "2024", + "site": "Unidentified content publisher", + "niche": "Not stated", + "traffic": { + "value": 200000, + "metric": "monthly visits", + "period": "200k–250k" + }, + "adRevenueMonthlyUsd": 1078, + "countries": [], + "decision": "Reported Ezoic plus Google Ads and about $1,078 monthly earnings.", + "limits": "Predates 2026 gate; visits are not MAU." + }, + { + "sourceUrl": "https://www.reddit.com/r/Blogging/comments/1uv87ne", + "publishedAt": "2026", + "site": "Unidentified new site", + "niche": "Not stated", + "traffic": { + "value": 2000, + "metric": "visitors", + "period": "under per month" + }, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "Poster said a 3.5-month-old site was not approved by Incubator.", + "limits": "Anonymous; niche/reason absent." + } + ], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Shortlist when new site clears 250k MAU or has exceptional Incubator evidence. For a low-volume solo blog, the limited program is not reliable access.", + "currentNetworkSignals": [ + "Pre-cutoff accounts may retain access only with continuity; not applicable to new site." + ], + "geographyPreference": "No public country rule found.", + "agePreference": "No public age minimum found.", + "confidence": "high", + "rationale": "Current official pages establish MAU and narrow Incubator. Older earnings examples measure visits, not MAU.", + "supportingSourceUrls": [ + "https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES", + "https://support.ezoic.com/kb/article/ezoic-incubator-program", + "https://www.reddit.com/r/adops/comments/1ftuclz" + ], + "gaps": [ + "Anecdotes predate policy or lack exact MAU.", + "No current accepted report with measured MAU found." + ] + }, + "sources": [ + { + "url": "https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES", + "title": "Current Ezoic requirements", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "250k MAU", + "grandfathering", + "Google/content" + ] + }, + { + "url": "https://support.ezoic.com/kb/article/ezoic-incubator-program", + "title": "Incubator guidance", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "20 slots/month", + "discretionary selection" + ] + }, + { + "url": "https://www.ezoic.com/terms", + "title": "Terms", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "share and payment floor" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/1ftuclz", + "title": "Ezoic publisher earnings", + "kind": "publisher_forum", + "publishedAt": "2024", + "checkedAt": "2026-10-22", + "claims": [ + "200–250k visits and $1,078; not MAU" + ] + }, + { + "url": "https://www.reddit.com/r/Blogging/comments/1uv87ne", + "title": "Incubator rejection", + "kind": "publisher_forum", + "publishedAt": "2026", + "checkedAt": "2026-10-22", + "claims": [ + "under 2k visitors/mo; 3.5-month site" + ] + } + ] + }, + { + "slug": "freestar", + "checkedAt": "2026-10-22", + "productType": "Managed ad monetization and ad operations", + "applicationUrl": "https://freestar.com/contact-us/", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Typical scale", + "value": "About 1m monthly pageviews", + "note": "Typical, not a hard floor.", + "sourceUrl": "https://freestar.com/publisher-quality-requirements/" + }, + { + "label": "Target-market share", + "value": "50%", + "note": "US/UK/Canada/NZ/Australia.", + "sourceUrl": "https://freestar.com/publisher-quality-requirements/" + }, + { + "label": "Organic audience", + "value": "50%", + "note": "Includes social, News/Discover, YouTube, Reddit and syndication—not only search.", + "sourceUrl": "https://freestar.com/publisher-quality-requirements/" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "Typically about 1m PV/mo; all sizes can apply.", + "note": "Typical scale, not cutoff.", + "sourceUrl": "https://freestar.com/contact-us/" + }, + { + "label": "Geography", + "value": "At least half from US/UK/Canada/NZ/Australia.", + "sourceUrl": "https://freestar.com/publisher-quality-requirements/" + }, + { + "label": "Traffic source", + "value": "At least 50% from organic audiences; includes social/news/video/community/syndication.", + "sourceUrl": "https://freestar.com/publisher-quality-requirements/" + }, + { + "label": "Content", + "value": "Original, human-focused, mostly long-form, brand-safe; GA4 and history requested.", + "sourceUrl": "https://freestar.com/publisher-quality-requirements/" + } + ], + "revenueShare": null, + "paymentTerms": null, + "paymentThreshold": null, + "paymentMethods": [], + "sources": [ + { + "label": "Quality requirements", + "url": "https://freestar.com/publisher-quality-requirements/" + }, + { + "label": "Contact/onboarding", + "url": "https://freestar.com/contact-us/" + } + ] + }, + "fit": { + "publisherTypes": [ + "established publishers wanting managed ad operations" + ], + "nichesStrong": [ + "sports", + "news", + "finance", + "auto", + "gaming", + "entertainment" + ], + "nichesWeak": [ + "small sites failing source or geography checks" + ], + "geographies": [ + "50%+ from US/UK/Canada/NZ/Australia" + ], + "role": "primary", + "entryPositioning": "Typically around 1m PV/month, plus two explicit 50% audience checks; 1m is not a hard gate.", + "compatibilityNotes": [ + "Managed service operates display stack; contract sets exclusivity.", + "Organic audience includes social, news, Discover, YouTube, Reddit and syndication." + ] + }, + "officialRequirements": [ + { + "metric": "Monthly pageviews", + "comparator": "typical, not hard minimum", + "amount": 1000000, + "unit": "pageviews", + "period": "month", + "scope": "typical publisher scale", + "program": "Freestar", + "sourceUrl": "https://freestar.com/publisher-quality-requirements/", + "note": null + }, + { + "metric": "Target markets", + "comparator": "minimum", + "amount": 50, + "unit": "percent", + "period": "of traffic", + "scope": "US/UK/Canada/NZ/Australia", + "program": "Freestar", + "sourceUrl": "https://freestar.com/publisher-quality-requirements/", + "note": null + }, + { + "metric": "Organic audiences", + "comparator": "minimum", + "amount": 50, + "unit": "percent", + "period": "of traffic", + "scope": "search/social/News/Discover/YouTube/Reddit/syndication", + "program": "Freestar", + "sourceUrl": "https://freestar.com/publisher-quality-requirements/", + "note": null + }, + { + "metric": "Content", + "comparator": "must be original, human-focused, long-form and brand-safe", + "amount": null, + "unit": "criteria", + "period": "ongoing", + "scope": "site", + "program": "Freestar", + "sourceUrl": "https://freestar.com/publisher-quality-requirements/", + "note": null + } + ], + "observations": [ + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/bxgb6c", + "publishedAt": "2019", + "site": "Several unnamed publishers", + "niche": "Not stated", + "traffic": { + "value": 1000000, + "metric": "monthly ad impressions", + "period": "one report 1–2m; others 5m and 25m" + }, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "Thread includes reports of smaller publishers accepted and larger sites using Freestar.", + "limits": "Impressions not pageviews; old, no denominator or detailed niche." + }, + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/mcb34i", + "publishedAt": "2021", + "site": "Unidentified publisher", + "niche": "Not stated", + "traffic": null, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "Said they used Freestar but could not compare before/after revenue.", + "limits": "No traffic, revenue or geography." + } + ], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Consider near the typical million-PV scale if both 50% geography and audience-source checks fit. Ask directly below that.", + "currentNetworkSignals": [ + "Partner history is reviewed, but other network approval is not Freestar acceptance." + ], + "geographyPreference": "Explicit 50% from US/UK/Canada/NZ/Australia.", + "agePreference": "No public age minimum found.", + "confidence": "medium", + "rationale": "Current official page has concrete audience rules; old forum accounts report impressions rather than PV.", + "supportingSourceUrls": [ + "https://freestar.com/publisher-quality-requirements/", + "https://freestar.com/contact-us/", + "https://www.reddit.com/r/adops/comments/bxgb6c" + ], + "gaps": [ + "No current entry example with exact PV and outcome.", + "No impression-to-pageview conversion.", + "Share and payout terms not public." + ] + }, + "sources": [ + { + "url": "https://freestar.com/publisher-quality-requirements/", + "title": "Publisher quality requirements", + "kind": "official", + "publishedAt": "2026-08-19", + "checkedAt": "2026-10-22", + "claims": [ + "50% organic includes social/news/Discover/YouTube/Reddit/syndication", + "50% target markets", + "typical scale" + ] + }, + { + "url": "https://freestar.com/contact-us/", + "title": "Contact/onboarding", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "all sizes may apply" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/bxgb6c", + "title": "Freestar publisher discussion", + "kind": "publisher_forum", + "publishedAt": "2019", + "checkedAt": "2026-10-22", + "claims": [ + "impression reports only" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/mcb34i", + "title": "Freestar comparison", + "kind": "publisher_forum", + "publishedAt": "2021", + "checkedAt": "2026-10-22", + "claims": [ + "no reliable before/after revenue comparison" + ] + } + ] + }, + { + "slug": "geniee-ssp", + "checkedAt": "2026-10-22", + "productType": "Supply-side platform and managed programmatic demand", + "applicationUrl": "https://admin.genieessp.com/app/signup/en_US", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Payment minimum", + "value": "$100 PayPal/Payoneer; $200 wire", + "note": "From earlier publisher terms; 2025 English terms did not reconfirm the threshold.", + "sourceUrl": "https://s.geniee.jp/aladdin/resources/GenieeInternational/terms_geniee_en.pdf" + }, + { + "label": "Pay day", + "value": "By end of second month after calculation", + "note": "Subject to advertiser payment; confirmed in current 2025 terms.", + "sourceUrl": "https://geniee.co.jp/doc/terms_of_service_en20250831.pdf" + } + ], + "joining": [ + { + "label": "Application", + "value": "Submit publisher signup and accurate site details.", + "sourceUrl": "https://admin.genieessp.com/app/signup/en_US" + }, + { + "label": "Traffic", + "value": "No public numeric floor located.", + "sourceUrl": "https://geniee.co.jp/doc/terms_of_service_en20250831.pdf" + }, + { + "label": "Content", + "value": "No false, obscene, infringing or illegal material.", + "sourceUrl": "https://geniee.co.jp/doc/terms_of_service_en20250831.pdf" + }, + { + "label": "Integration", + "value": "Install and retain Geniee tags.", + "sourceUrl": "https://geniee.co.jp/doc/terms_of_service_en20250831.pdf" + } + ], + "revenueShare": null, + "paymentTerms": "Current 2025 terms: transfer by end of second month after calculation, conditional on advertiser payment.", + "paymentThreshold": "Earlier terms: $100 PayPal/Payoneer; $200 wire; current 2025 terms do not reconfirm", + "paymentMethods": [ + "Bank transfer (current 2025 terms)", + "PayPal (current 2025 terms)", + "Payoneer (listed in earlier terms; not reconfirmed)", + "Wire transfer (listed in earlier terms; not reconfirmed)" + ], + "sources": [ + { + "label": "Publisher signup", + "url": "https://admin.genieessp.com/app/signup/en_US" + }, + { + "label": "Publisher terms, 2025", + "url": "https://geniee.co.jp/doc/terms_of_service_en20250831.pdf" + }, + { + "label": "English publisher terms, older", + "url": "https://s.geniee.jp/aladdin/resources/GenieeInternational/terms_geniee_en.pdf" + }, + { + "label": "SSP overview", + "url": "https://en.geniee.co.jp/services/publishers/" + } + ] + }, + "fit": { + "publisherTypes": [ + "established publishers seeking SSP demand/operations" + ], + "nichesStrong": [ + "Japanese media", + "news and larger publishers", + "apps and web inventory" + ], + "nichesWeak": [ + "small publishers seeking a transparent self-serve ad network" + ], + "geographies": [ + "Japan is a strong company market; global publisher service also offered" + ], + "role": "infrastructure", + "entryPositioning": "Contact/application-led SSP; no public traffic gate. Better fit for publishers with ad operations than a beginner blog.", + "compatibilityNotes": [ + "An SSP can sit in a larger stack; exact tags, demand setup and exclusivity are account-specific." + ] + }, + "officialRequirements": [ + { + "metric": "Traffic", + "comparator": "not published", + "amount": null, + "unit": "not stated", + "period": "not stated", + "scope": "publisher properties", + "program": "Geniee SSP", + "sourceUrl": "https://geniee.co.jp/doc/terms_of_service_en20250831.pdf", + "note": null + }, + { + "metric": "Applicant", + "comparator": "must be publisher and provide accurate application details", + "amount": null, + "unit": "application", + "period": "before approval", + "scope": "publisher", + "program": "Geniee SSP", + "sourceUrl": "https://geniee.co.jp/doc/terms_of_service_en20250831.pdf", + "note": null + }, + { + "metric": "Content", + "comparator": "must exclude", + "amount": null, + "unit": "false/obscene/infringing/illegal content", + "period": "ongoing", + "scope": "site/app", + "program": "Geniee SSP", + "sourceUrl": "https://geniee.co.jp/doc/terms_of_service_en20250831.pdf", + "note": null + }, + { + "metric": "Integration", + "comparator": "install required tags", + "amount": null, + "unit": "ad tags", + "period": "ongoing", + "scope": "approved site", + "program": "Geniee SSP", + "sourceUrl": "https://geniee.co.jp/doc/terms_of_service_en20250831.pdf", + "note": null + } + ], + "observations": [], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Consider for established Japan/APAC media and app publishers needing SSP infrastructure. Not a strong default solo-blog recommendation without a direct sales conversation.", + "currentNetworkSignals": [ + "Existing SSP/header-bidding partners may be compatible but do not prove admission." + ], + "geographyPreference": "Japan-centered provider with international publisher support; no public country minimum.", + "agePreference": "No public age minimum found.", + "confidence": "low", + "rationale": "Current official page and 2025 terms describe service and contract basics without a traffic floor. Search found no reliable first-person application evidence.", + "supportingSourceUrls": [ + "https://en.geniee.co.jp/services/publishers/", + "https://geniee.co.jp/doc/terms_of_service_en20250831.pdf" + ], + "gaps": [ + "2025 current terms did not reconfirm older minimum-payment figures.", + "No first-person publisher acceptance story with traffic, niche and country context.", + "No public share, site-age or Google-standing gate." + ] + }, + "sources": [ + { + "url": "https://en.geniee.co.jp/services/publishers/", + "title": "Geniee publisher services", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "SSP/RTB publisher service" + ] + }, + { + "url": "https://geniee.co.jp/products/ssp/", + "title": "Geniee Japan SSP", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "Japanese market and full support; aggregate requests are not publisher traffic" + ] + }, + { + "url": "https://geniee.co.jp/doc/terms_of_service_en20250831.pdf", + "title": "English publisher terms", + "kind": "official_terms", + "publishedAt": "2025-08-31", + "checkedAt": "2026-10-22", + "claims": [ + "applicant details", + "content restrictions", + "payment timing and methods" + ] + }, + { + "url": "https://s.geniee.jp/aladdin/resources/GenieeInternational/terms_geniee_en.pdf", + "title": "Older English publisher terms", + "kind": "official_terms", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "old payout thresholds; not reconfirmed in 2025 terms" + ] + }, + { + "url": "https://www.redvolcano.io/data/technologies/geniee-monetization/", + "title": "Technology footprint estimate", + "kind": "independent_analysis", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "detected sites; not acceptance or traffic" + ] + } + ] + }, + { + "slug": "google-adsense", + "checkedAt": "2026-10-22", + "productType": "Self-serve contextual display advertising", + "applicationUrl": "https://www.google.com/adsense/start/", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Publisher share", + "value": "80%", + "note": "For AdSense for Content after advertiser platform fee; about 68% with Google Ads demand.", + "sourceUrl": "https://support.google.com/adsense/answer/180195?hl=en" + }, + { + "label": "Payment minimum", + "value": "$100 USD", + "note": "Equivalent thresholds vary by account currency.", + "sourceUrl": "https://support.google.com/adsense/answer/1709871?hl=en" + }, + { + "label": "Pay day", + "value": "21st–26th each month", + "note": "When balance reaches payment threshold and no holds.", + "sourceUrl": "https://support.google.com/adsense/answer/7164701?hl=en" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "No numeric traffic rule on current eligibility checklist.", + "note": "This page does not promise that no minimum exists.", + "sourceUrl": "https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk" + }, + { + "label": "Content", + "value": "Original, high-quality content and publisher-policy compliance.", + "sourceUrl": "https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk" + }, + { + "label": "Applicant", + "value": "18+, or adult representative; must own/control site HTML and be in a supported signup country.", + "sourceUrl": "https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk" + }, + { + "label": "Review", + "value": "Usually days; sometimes 2–4 weeks; finish setup within 6 months.", + "sourceUrl": "https://support.google.com/adsense/answer/7402256?hl=en-AG" + } + ], + "revenueShare": "80% after advertiser platform fee for AdSense for Content", + "paymentTerms": "Monthly; issued 21st–26th after threshold and holds clear", + "paymentThreshold": "$100 USD or account-currency equivalent", + "paymentMethods": [ + "Check", + "EFT", + "SEPA", + "Wire", + "PayPal Hyperwallet where available" + ], + "sources": [ + { + "label": "Eligibility", + "url": "https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk" + }, + { + "label": "Activation and review", + "url": "https://support.google.com/adsense/answer/7402256?hl=en-AG" + }, + { + "label": "Share", + "url": "https://support.google.com/adsense/answer/180195?hl=en" + }, + { + "label": "Payment threshold", + "url": "https://support.google.com/adsense/answer/1709871?hl=en" + }, + { + "label": "Payment schedule", + "url": "https://support.google.com/adsense/answer/7164701?hl=en" + }, + { + "label": "Signup countries", + "url": "https://support.google.com/adsense/answer/13402307?hl=en" + } + ] + }, + "fit": { + "publisherTypes": [ + "new and established web publishers" + ], + "nichesStrong": [ + "broad policy-compliant content and tools" + ], + "nichesWeak": [ + "content prohibited by Google publisher policies" + ], + "geographies": [ + "Countries listed as eligible for AdSense signup" + ], + "role": "primary", + "entryPositioning": "Default self-serve starting point; official checklist publishes no traffic or site-age number, but evaluates site content and policy compliance.", + "compatibilityNotes": [ + "May coexist with other providers only within Google ad density, placement and policy rules.", + "Mediavine/Journey standing checks and another network's acceptance do not guarantee AdSense approval." + ] + }, + "officialRequirements": [ + { + "metric": "Traffic", + "comparator": "no numeric gate listed", + "amount": null, + "unit": "not stated", + "period": "not stated", + "scope": "site", + "program": "AdSense", + "sourceUrl": "https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk", + "note": "Eligibility page does not explicitly promise no minimum." + }, + { + "metric": "Content", + "comparator": "requires original, high-quality, policy-compliant content", + "amount": null, + "unit": "content", + "period": "ongoing", + "scope": "site", + "program": "AdSense", + "sourceUrl": "https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk", + "note": null + }, + { + "metric": "Applicant age", + "comparator": "minimum", + "amount": 18, + "unit": "years", + "period": "at application", + "scope": "account holder or guardian arrangement", + "program": "AdSense", + "sourceUrl": "https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk", + "note": null + }, + { + "metric": "Site access", + "comparator": "must access/control HTML", + "amount": null, + "unit": "site code", + "period": "verification", + "scope": "site owner", + "program": "AdSense", + "sourceUrl": "https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk", + "note": null + }, + { + "metric": "Signup availability", + "comparator": "must live in supported country", + "amount": null, + "unit": "country", + "period": "application", + "scope": "account holder", + "program": "AdSense", + "sourceUrl": "https://support.google.com/adsense/answer/13402307?hl=en", + "note": null + } + ], + "observations": [ + { + "sourceUrl": "https://www.reddit.com/r/passive_income/comments/1tyq291", + "publishedAt": null, + "site": "Unidentified calculator site", + "niche": "Online calculator/tool", + "traffic": null, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "Poster said a three-week-old calculator site was rejected twice.", + "limits": "No traffic or full content-quality context; cannot infer a traffic or age gate." + } + ], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Useful default for a new or small compliant site because no numeric traffic floor appears in the checklist; approval still depends on site quality and policy review.", + "currentNetworkSignals": [ + "Can coexist with some providers subject to Google policies; other provider memberships are not transitive approval." + ], + "geographyPreference": "No public country rule found.", + "agePreference": "No public age minimum found.", + "confidence": "high", + "rationale": "Official eligibility and activation guides give content, age, ownership and review facts but no traffic number.", + "supportingSourceUrls": [ + "https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk", + "https://support.google.com/adsense/answer/7402256?hl=en-AG", + "https://support.google.com/adsense/answer/180195?hl=en" + ], + "gaps": [ + "No measured publisher entry example with traffic and successful acceptance found.", + "A recent tool-site rejection has no traffic data or detailed review reason." + ] + }, + "sources": [ + { + "url": "https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk", + "title": "AdSense eligibility requirements", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "content", + "age", + "site access", + "no listed traffic/age gate" + ] + }, + { + "url": "https://support.google.com/adsense/answer/7402256?hl=en-AG", + "title": "AdSense activation", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "review timing and setup window" + ] + }, + { + "url": "https://support.google.com/adsense/answer/180195?hl=en", + "title": "AdSense revenue share", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "80% after fee and approx. 68% Google Ads demand" + ] + }, + { + "url": "https://www.reddit.com/r/passive_income/comments/1tyq291", + "title": "Calculator-site rejection report", + "kind": "publisher_forum", + "publishedAt": "2026", + "checkedAt": "2026-10-22", + "claims": [ + "three-week-old site rejected twice; no traffic data" + ] + } + ] + }, + { + "slug": "infolinks", + "checkedAt": "2026-10-22", + "productType": "Supplemental in-text, overlay and native advertising", + "applicationUrl": "https://www.infolinks.com/publishers/", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Traffic", + "value": "No minimum PV or visitor count", + "note": "Current official support result says all publisher sizes can apply.", + "sourceUrl": "https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks" + }, + { + "label": "Payment minimum", + "value": "$50 most methods; $100 wire/Western Union", + "note": "Current payment help; fees vary by route.", + "sourceUrl": "https://sites0001.infolinks.com/support/payments/what-are-my-payment-options" + }, + { + "label": "Pay timing", + "value": "45 days after month-end", + "note": "Service agreement says 45 working days; current help says 45 days after month-end—contract is older.", + "sourceUrl": "https://sites0001.infolinks.com/service-agreement" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "No PV/visitor minimum; every site reviewed and may be declined.", + "sourceUrl": "https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks" + }, + { + "label": "Review", + "value": "Usually within 48 hours.", + "sourceUrl": "https://sites0001.infolinks.com/support/account/how-do-i-sign-up-as-an-infolinks-publisher" + }, + { + "label": "Content", + "value": "No illegal, adult/offensive, hateful or infringing content.", + "sourceUrl": "https://sites0001.infolinks.com/service-agreement" + }, + { + "label": "Integration", + "value": "Install Infolinks JavaScript after approval.", + "sourceUrl": "https://sites0001.infolinks.com/support/integration/how-do-i-integrate-infolinks-into-my-website" + } + ], + "revenueShare": "70% for In-Text ads under 2015 agreement; other format rates vary", + "paymentTerms": "45 working days after month-end under 2015 agreement", + "paymentThreshold": "$50 most methods; $100 wire/Western Union", + "paymentMethods": [ + "PayPal", + "Bank wire", + "eCheck", + "ACH", + "Payoneer", + "Western Union" + ], + "sources": [ + { + "label": "Eligibility", + "url": "https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks" + }, + { + "label": "Signup", + "url": "https://sites0001.infolinks.com/support/account/how-do-i-sign-up-as-an-infolinks-publisher" + }, + { + "label": "Payments", + "url": "https://sites0001.infolinks.com/support/payments/what-are-my-payment-options" + }, + { + "label": "Publisher agreement (2015)", + "url": "https://sites0001.infolinks.com/service-agreement" + }, + { + "label": "Payment fees", + "url": "https://sites0001.infolinks.com/support/payments/do-i-pay-fees-when-receiving-my-infolinks-payment" + } + ] + }, + "fit": { + "publisherTypes": [ + "small and medium publishers testing contextual supplemental formats" + ], + "nichesStrong": [ + "content sites with contextual text and audience engagement" + ], + "nichesWeak": [ + "sites seeking a primary high-yield managed display partner" + ], + "geographies": [ + "No public country gate" + ], + "role": "supplemental", + "entryPositioning": "All site sizes can apply; no official PV minimum, but every site is reviewed and earnings depend on ad opportunities.", + "compatibilityNotes": [ + "Treat as supplemental format. Public policy on coexistence with specific display providers was not confirmed; review current agreement." + ] + }, + "officialRequirements": [ + { + "metric": "Traffic", + "comparator": "no minimum published", + "amount": 0, + "unit": "visitors/pageviews", + "period": "not stated", + "scope": "all sizes subject to review", + "program": "Infolinks", + "sourceUrl": "https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks", + "note": null + }, + { + "metric": "Review timing", + "comparator": "usually within", + "amount": 48, + "unit": "hours", + "period": "after signup", + "scope": "publisher account", + "program": "Infolinks", + "sourceUrl": "https://sites0001.infolinks.com/support/account/how-do-i-sign-up-as-an-infolinks-publisher", + "note": null + }, + { + "metric": "Content", + "comparator": "must avoid", + "amount": null, + "unit": "illegal/adult/offensive/hateful/infringing content", + "period": "ongoing", + "scope": "site", + "program": "Infolinks", + "sourceUrl": "https://sites0001.infolinks.com/service-agreement", + "note": null + }, + { + "metric": "Prior provider history", + "comparator": "agreement contains 24-month prior-termination restriction", + "amount": null, + "unit": "account status", + "period": "prior 24 months", + "scope": "publisher/entities", + "program": "Infolinks", + "sourceUrl": "https://sites0001.infolinks.com/service-agreement", + "note": "Agreement last updated 2015; current help page does not reconfirm this clause." + } + ], + "observations": [], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Can be shortlisted as a low-bar supplemental experiment because there is no published volume floor, but not as the main network for a publisher expecting meaningful managed-display revenue.", + "currentNetworkSignals": [ + "No confirmed modern coexistence rule; verify the older agreement before combining with another provider." + ], + "geographyPreference": "No public country rule found.", + "agePreference": "No public age minimum found.", + "confidence": "medium", + "rationale": "Official help covers all publisher sizes and payment choices, but public share terms are from an old agreement and independent reports lack context.", + "supportingSourceUrls": [ + "https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks", + "https://sites0001.infolinks.com/support/payments/what-are-my-payment-options", + "https://sites0001.infolinks.com/service-agreement" + ], + "gaps": [ + "Agreement last updated 2015; revenue share and 24-month clause may have changed.", + "Review sites contain generic positive/low-earning statements without traffic/niche/context.", + "No dated application acceptance story with metrics found." + ] + }, + "sources": [ + { + "url": "https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks", + "title": "Publisher eligibility support", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "no numeric minimum; review all sites" + ] + }, + { + "url": "https://sites0001.infolinks.com/support/account/how-do-i-sign-up-as-an-infolinks-publisher", + "title": "Publisher signup help", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "short form and 48-hour review" + ] + }, + { + "url": "https://sites0001.infolinks.com/support/payments/what-are-my-payment-options", + "title": "Payment options help", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "method-specific min and schedule" + ] + }, + { + "url": "https://sites0001.infolinks.com/service-agreement", + "title": "Publisher service agreement", + "kind": "official_terms", + "publishedAt": "2015-01-27", + "checkedAt": "2026-10-22", + "claims": [ + "70% for In-Text only", + "other rates vary", + "older contract language" + ] + }, + { + "url": "https://www.trustpilot.com/review/infolinks.com", + "title": "Publisher review page", + "kind": "review_site", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "generic impressions; no qualified traffic case" + ] + }, + { + "url": "https://www.g2.com/products/infolinks/reviews", + "title": "Software reviews", + "kind": "review_site", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "low-earning complaint without site/traffic context" + ] + } + ] + }, + { + "slug": "journey-by-mediavine", + "checkedAt": "2026-10-22", + "productType": "Lower-volume managed ad program and Mediavine growth path", + "applicationUrl": "https://www.journeymv.com/getting-started-with-journey-by-mediavine/", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Sessions to apply", + "value": "1,000 Tier 1 sessions in 30 days", + "note": "Current Mediavine application requirement for Journey.", + "sourceUrl": "https://www.mediavine.com/application-requirements/" + }, + { + "label": "Share", + "value": "70%", + "note": "Journey publisher share.", + "sourceUrl": "https://www.journeymv.com/getting-started-with-journey-by-mediavine/" + }, + { + "label": "Pay day", + "value": "Net 65", + "note": "Journey schedule.", + "sourceUrl": "https://www.journeymv.com/getting-started-with-journey-by-mediavine/" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "At least 1k Tier 1 sessions in 30 days.", + "sourceUrl": "https://www.mediavine.com/application-requirements/" + }, + { + "label": "Setup", + "value": "Run Grow for at least 30 days; GA4 is optional.", + "sourceUrl": "https://www.journeymv.com/getting-started-with-journey-by-mediavine/" + }, + { + "label": "Site age", + "value": "The 2024 getting-started guide describes four months of domain history", + "sourceUrl": "https://www.journeymv.com/getting-started-with-journey-by-mediavine/", + "note": "Dated ad-partner guidance; confirm whether the current application still applies this condition." + }, + { + "label": "Review", + "value": "Original, human, brand-safe audience; Google account in good standing.", + "sourceUrl": "https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine/" + } + ], + "revenueShare": "70%", + "paymentTerms": "Net 65", + "paymentThreshold": null, + "paymentMethods": [], + "sources": [ + { + "label": "Journey setup and terms", + "url": "https://www.journeymv.com/getting-started-with-journey-by-mediavine/" + }, + { + "label": "Current requirements", + "url": "https://www.mediavine.com/application-requirements/" + }, + { + "label": "Approval criteria", + "url": "https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine/" + }, + { + "label": "Journey FAQ", + "url": "https://www.journeymv.com/affiliates-faq/" + } + ], + "joinSummary": "1,000 Tier 1 sessions in 30 days" + }, + "fit": { + "publisherTypes": [ + "growing content blogs and audience-first sites" + ], + "nichesStrong": [ + "travel", + "food", + "lifestyle", + "education and evergreen content" + ], + "nichesWeak": [ + "low-quality or non-human traffic; sites unable to run Grow" + ], + "geographies": [ + "No fixed Tier1 share; quality and audience composition reviewed" + ], + "role": "primary", + "entryPositioning": "1,000 Tier1 sessions in 30 days, 30 days on Grow and at least four months domain history.", + "compatibilityNotes": [ + "Journey is a growth-stage Mediavine program; exact ad-stack overlap and migration conditions depend on onboarding.", + "A Journey acceptance does not establish Official eligibility." + ] + }, + "officialRequirements": [ + { + "metric": "Sessions", + "comparator": "minimum", + "amount": 1000, + "unit": "Tier1 sessions", + "period": "30 days", + "scope": "site", + "program": "Journey", + "sourceUrl": "https://www.mediavine.com/application-requirements/", + "note": null + }, + { + "metric": "Grow", + "comparator": "must run", + "amount": 30, + "unit": "days", + "period": "before review", + "scope": "site", + "program": "Journey", + "sourceUrl": "https://www.journeymv.com/getting-started-with-journey-by-mediavine/", + "note": null + }, + { + "metric": "Domain age", + "comparator": "minimum", + "amount": 4, + "unit": "months", + "period": "at application", + "scope": "domain", + "program": "Journey", + "sourceUrl": "https://www.journeymv.com/getting-started-with-journey-by-mediavine/", + "note": "Getting-started guide dated 2024-04-15 describes four months of domain history and expects the partner condition to continue. Confirm current application; do not encode as a verified 2026 hard gate.", + "evidenceStatus": "dated_guidance" + }, + { + "metric": "Google standing", + "comparator": "must be in good standing", + "amount": null, + "unit": "AdSense/Ad Exchange policy", + "period": "ongoing", + "scope": "publisher account", + "program": "Journey", + "sourceUrl": "https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine/", + "note": null + } + ], + "observations": [ + { + "sourceUrl": "https://www.reddit.com/r/Blogging/comments/1ezlcpk", + "publishedAt": "2024", + "site": "Unidentified blog", + "niche": "Not stated", + "traffic": { + "value": 15000, + "metric": "sessions", + "period": "month near acceptance" + }, + "adRevenueMonthlyUsd": null, + "countries": [ + "United States" + ], + "decision": "Poster said Journey accepted after a seven-week review; traffic had risen from 5k sessions in May to 10k in July and 15–17k that month; 25% US and 35% Tier1.", + "limits": "Niche not given; self-reported and above published threshold." + }, + { + "sourceUrl": "https://www.reddit.com/r/Blogging/comments/1dkzgsl", + "publishedAt": "2024", + "site": "German-language blog", + "niche": "Not stated", + "traffic": { + "value": 70000, + "metric": "sessions", + "period": "month at acceptance" + }, + "adRevenueMonthlyUsd": null, + "countries": [ + "Germany" + ], + "decision": "Poster reported Journey acceptance after about 60 days, after Mediavine Official rejection; said about 90% of traffic was German.", + "limits": "Reported AdSense income before migration, not Journey entry earnings; anecdote is above minimum." + }, + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/1vn39i3", + "publishedAt": "2026", + "site": "Unidentified site", + "niche": "Not stated", + "traffic": { + "value": 4400, + "metric": "sessions", + "period": "month" + }, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "Poster said the Journey application was in review, then after a unified-form reapplication was rejected quickly for traffic/composition despite 77% Tier1.", + "limits": "Niche and country breakdown absent; self-reported process." + }, + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/1wq2v87", + "publishedAt": "2026-09", + "site": "Unidentified site", + "niche": "Not stated", + "traffic": { + "value": 90000, + "metric": "sessions", + "period": "month" + }, + "adRevenueMonthlyUsd": { + "value": 750, + "currency": "USD", + "period": "month" + }, + "countries": [], + "decision": "Publisher reported September Journey earnings after 90k sessions and over 180k pageviews; earlier daily PV run rate was about 3k.", + "limits": "Publisher-reported single month, niche and country mix not supplied; performance is not a forecast." + } + ], + "inference": { + "trafficRange": { + "low": 1000, + "high": 1000, + "metric": "Tier1 sessions", + "period": "30 days", + "basisSourceUrls": [ + "https://www.mediavine.com/application-requirements/" + ], + "confidence": "high", + "note": "Published minimum; not a general expected entry range." + }, + "revenueRange": null, + "practicalFit": "A clear shortlist for small-to-mid content publishers at 1k Tier1 sessions, but review still weighs quality and composition. Sites above this gate can still be rejected.", + "currentNetworkSignals": [ + "Current network membership is only a soft comparable signal; Official and Journey criteria differ." + ], + "geographyPreference": "No fixed Tier1 share; reported acceptance at 35% Tier1 and rejection at 77% show composition is contextual, not a numeric share rule.", + "agePreference": "Four months domain history and 30 days Grow required.", + "confidence": "medium", + "rationale": "Official gates are clear. First-person accounts show acceptance above threshold at low US mix, a contradictory rejection despite high Tier1 share, and one earnings snapshot.", + "supportingSourceUrls": [ + "https://www.mediavine.com/application-requirements/", + "https://www.journeymv.com/getting-started-with-journey-by-mediavine/", + "https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine/", + "https://www.reddit.com/r/Blogging/comments/1ezlcpk", + "https://www.reddit.com/r/adops/comments/1vn39i3" + ], + "gaps": [ + "A recent applicant report cites changing unified-form routing; official page remains eligibility authority.", + "No accepted publisher case exactly at 1,000 sessions found.", + "Earnings example is not a stable forecast and lacks niche/geography." + ] + }, + "sources": [ + { + "url": "https://www.mediavine.com/application-requirements/", + "title": "Mediavine application requirements", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "1k Tier1 sessions for Journey" + ] + }, + { + "url": "https://www.journeymv.com/getting-started-with-journey-by-mediavine/", + "title": "Journey setup and getting started", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "Grow 30 days", + "4-month domain history", + "70% share and Net65" + ] + }, + { + "url": "https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine/", + "title": "Approval criteria", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "content/Google standing/quality" + ] + }, + { + "url": "https://www.reddit.com/r/Blogging/comments/1ezlcpk", + "title": "Journey acceptance report", + "kind": "publisher_forum", + "publishedAt": "2024", + "checkedAt": "2026-10-22", + "claims": [ + "15–17k sessions", + "35% Tier1", + "accepted after seven weeks" + ] + }, + { + "url": "https://www.reddit.com/r/Blogging/comments/1dkzgsl", + "title": "German Journey report", + "kind": "publisher_forum", + "publishedAt": "2024", + "checkedAt": "2026-10-22", + "claims": [ + "70k sessions", + "90% Germany", + "accepted after about 60 days" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/1vn39i3", + "title": "Journey application routing report", + "kind": "publisher_forum", + "publishedAt": "2026", + "checkedAt": "2026-10-22", + "claims": [ + "4.4k sessions, 77% Tier1 and reported rejection" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/1wq2v87", + "title": "Journey earnings report", + "kind": "publisher_forum", + "publishedAt": "2026-09", + "checkedAt": "2026-10-22", + "claims": [ + "90k sessions, 180k+ PV and $750 reported" + ] + } + ] + }, + { + "slug": "media-net", + "checkedAt": "2026-10-22", + "productType": "Contextual display, native/video demand and managed Prebid service", + "applicationUrl": "https://www.media.net/publishers", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Pay day", + "value": "Net 30", + "note": "Current publisher agreement says monthly payment for collected click-through revenue.", + "sourceUrl": "https://www.media.net/legal/" + } + ], + "joining": [ + { + "label": "Traffic source", + "value": "Primarily organic traffic; no public numeric floor.", + "sourceUrl": "https://www.media.net/legal/inventorypolicies/" + }, + { + "label": "Content", + "value": "Original, high-quality, navigable; restricted content excluded.", + "sourceUrl": "https://www.media.net/legal/inventorypolicies/" + }, + { + "label": "Ads.txt", + "value": "Authorized ads.txt/app-ads.txt required.", + "sourceUrl": "https://www.media.net/legal/inventorypolicies/" + }, + { + "label": "Payment", + "value": "Monthly Net30 based on collected click-through revenue less costs/commissions.", + "sourceUrl": "https://www.media.net/legal/" + } + ], + "revenueShare": null, + "paymentTerms": "Net 30 monthly on collected click-through revenue", + "paymentThreshold": null, + "paymentMethods": [], + "sources": [ + { + "label": "Publisher page", + "url": "https://www.media.net/publishers" + }, + { + "label": "Inventory policy", + "url": "https://www.media.net/legal/inventorypolicies/" + }, + { + "label": "Publisher agreement", + "url": "https://www.media.net/legal/" + } + ] + }, + "fit": { + "publisherTypes": [ + "content publishers with mostly organic audiences and ad operations" + ], + "nichesStrong": [ + "news", + "finance", + "how-to and editorial" + ], + "nichesWeak": [ + "sites with mostly paid/invalid traffic or prohibited content" + ], + "geographies": [ + "No public preferred country share" + ], + "role": "infrastructure", + "entryPositioning": "Managed display/Prebid demand; no public traffic number, but the policy expects mostly organic traffic and compliant inventory.", + "compatibilityNotes": [ + "Current terms prohibit a competing service with substantially similar ads; treat same-inventory use as restricted unless Media.net approves in writing." + ] + }, + "officialRequirements": [ + { + "metric": "Traffic source", + "comparator": "primarily organic", + "amount": null, + "unit": "traffic source", + "period": "ongoing", + "scope": "site traffic", + "program": "Media.net", + "sourceUrl": "https://www.media.net/legal/inventorypolicies/", + "note": null + }, + { + "metric": "Traffic volume", + "comparator": "not published", + "amount": null, + "unit": "not stated", + "period": "not stated", + "scope": "publisher site", + "program": "Media.net", + "sourceUrl": "https://www.media.net/publishers", + "note": null + }, + { + "metric": "Content", + "comparator": "must be original and policy-compliant", + "amount": null, + "unit": "content", + "period": "ongoing", + "scope": "site", + "program": "Media.net", + "sourceUrl": "https://www.media.net/legal/inventorypolicies/", + "note": null + }, + { + "metric": "Ads.txt", + "comparator": "authorized file required", + "amount": null, + "unit": "ads.txt/app-ads.txt", + "period": "ongoing", + "scope": "site/app", + "program": "Media.net", + "sourceUrl": "https://www.media.net/legal/inventorypolicies/", + "note": null + }, + { + "metric": "Exclusivity", + "comparator": "no alternative service showing substantially similar ads unless authorized", + "amount": null, + "unit": "competing ad service", + "period": "ongoing", + "scope": "same inventory", + "program": "Media.net", + "sourceUrl": "https://www.media.net/legal/", + "note": null + } + ], + "observations": [ + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/15ql4jb", + "publishedAt": "2023", + "site": "Unidentified publisher", + "niche": "Not stated", + "traffic": null, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "Poster said they used Media.net across sites and had gone about six months without support responses.", + "limits": "No traffic, niche, geography or earnings; service report only." + }, + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/ddntw5", + "publishedAt": "2019", + "site": "Unidentified publisher", + "niche": "Not stated", + "traffic": null, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "Poster described Media.net as the lowest-performing bidder among their header-bidding partners.", + "limits": "Old, subjective, no site metrics." + } + ], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Consider for publishers with mostly organic traffic wanting contextual display/native/video demand and a managed stack. Low confidence for small sites because acceptance and yield criteria are not public.", + "currentNetworkSignals": [ + "Agreement restricts substantially similar competing ads; do not assume it can supplement a current managed display network." + ], + "geographyPreference": "No public country rule found.", + "agePreference": "No public age minimum found.", + "confidence": "low", + "rationale": "Current policy and agreement establish organic source, content, ads.txt and competition clauses. Independent reports are old and lack scale.", + "supportingSourceUrls": [ + "https://www.media.net/publishers", + "https://www.media.net/legal/inventorypolicies/", + "https://www.media.net/legal/" + ], + "gaps": [ + "No numeric traffic/revenue gate or geographies published.", + "Payment contract says Net30, but no threshold/method found.", + "Older agreement clauses and specific prior-provider history need confirmation in current publisher contract." + ] + }, + "sources": [ + { + "url": "https://www.media.net/publishers", + "title": "Media.net publisher page", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "managed Prebid and demand product" + ] + }, + { + "url": "https://www.media.net/legal/inventorypolicies/", + "title": "Inventory policies", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "organic traffic", + "content", + "ads.txt" + ] + }, + { + "url": "https://www.media.net/legal/", + "title": "Publisher agreement", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "Net30", + "no minimum revenue guarantee", + "substantially similar competing service restriction" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/15ql4jb", + "title": "Publisher support complaint", + "kind": "publisher_forum", + "publishedAt": "2023", + "checkedAt": "2026-10-22", + "claims": [ + "six months without support response; no size" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/ddntw5", + "title": "Header-bidding comparison", + "kind": "publisher_forum", + "publishedAt": "2019", + "checkedAt": "2026-10-22", + "claims": [ + "subjective lowest-performance report" + ] + } + ] + }, + { + "slug": "mediavine", + "checkedAt": "2026-10-22", + "productType": "Managed display ad network with multiple publisher growth tiers", + "applicationUrl": "https://www.mediavine.com/application-requirements/", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Official revenue gate", + "value": "$5,000", + "note": "Site ad revenue in the previous calendar year; not last month or trailing 12 months.", + "sourceUrl": "https://help.mediavine.com/programs-and-the-publisher-path-to-growth" + }, + { + "label": "Official share", + "value": "75%", + "note": "For new Official sites in 2026; Select/Signature/Premiere tiers are higher and legacy terms differ.", + "sourceUrl": "https://help.mediavine.com/revenue-share" + }, + { + "label": "Pay day", + "value": "Net 65", + "note": "Processed from month end.", + "sourceUrl": "https://help.mediavine.com/when-am-i-getting-paid-0" + } + ], + "joining": [ + { + "label": "Revenue", + "value": "At least $5k site ad revenue in previous calendar year.", + "sourceUrl": "https://help.mediavine.com/programs-and-the-publisher-path-to-growth" + }, + { + "label": "Content", + "value": "Original, audience-first, human and brand-safe; traffic sources and demographics reviewed.", + "sourceUrl": "https://help.mediavine.com/mediavine-official" + }, + { + "label": "Google standing", + "value": "Good standing with AdSense and Ad Exchange; no active policy issues.", + "sourceUrl": "https://help.mediavine.com/mediavine-official" + }, + { + "label": "Traffic", + "value": "No separate public PV/session gate for Official; revenue rule controls.", + "sourceUrl": "https://help.mediavine.com/programs-and-the-publisher-path-to-growth" + }, + { + "label": "Application", + "value": "Provide analytics and allow site review; exact verification may vary.", + "sourceUrl": "https://prod.mediavine.com/blog/mediavine-application-process-faq/" + } + ], + "revenueShare": "75% for new Official sites in 2026; 80% Select, 85% Signature, 90% Premiere/Premiere Plus; legacy differs", + "paymentTerms": "Net 65 from month end; processed first business day", + "paymentThreshold": "$100 most methods; $200 eCheck/local transfer", + "paymentMethods": [ + "PayPal", + "Domestic ACH", + "Wise", + "US wire", + "eCheck/local bank transfer", + "International wire" + ], + "sources": [ + { + "label": "Publisher Path and previous-year revenue", + "url": "https://help.mediavine.com/programs-and-the-publisher-path-to-growth" + }, + { + "label": "Official criteria", + "url": "https://help.mediavine.com/mediavine-official" + }, + { + "label": "Revenue share", + "url": "https://help.mediavine.com/revenue-share" + }, + { + "label": "Payment timing", + "url": "https://help.mediavine.com/when-am-i-getting-paid-0" + }, + { + "label": "Payment methods", + "url": "https://help.mediavine.com/mediavine-payment-methods" + } + ], + "joinSummary": "$5,000 in site ad revenue in the prior calendar year" + }, + "fit": { + "publisherTypes": [ + "established audience-first content publishers" + ], + "nichesStrong": [ + "food", + "travel", + "lifestyle", + "parenting", + "finance and evergreen editorial" + ], + "nichesWeak": [ + "sites without $5k prior-year ad revenue or with policy/traffic-quality issues" + ], + "geographies": [ + "No fixed country share; location, sources and demographics are reviewed" + ], + "role": "primary", + "entryPositioning": "Official requires $5k ad revenue from the prior calendar year. Current-month earnings can estimate opportunity, but cannot prove this exact requirement.", + "compatibilityNotes": [ + "Journey is a separate lower-volume program and not proof of Official eligibility.", + "Official rate tiers apply to new 2026 sites; legacy agreements can differ." + ] + }, + "officialRequirements": [ + { + "metric": "Site ad revenue", + "comparator": "minimum", + "amount": 5000, + "unit": "USD", + "period": "previous calendar year", + "scope": "site", + "program": "Official", + "sourceUrl": "https://help.mediavine.com/programs-and-the-publisher-path-to-growth", + "note": "Not last month or trailing 12 months." + }, + { + "metric": "Content", + "comparator": "must be original, audience-first, human and brand-safe", + "amount": null, + "unit": "content/traffic quality", + "period": "ongoing", + "scope": "site", + "program": "Official", + "sourceUrl": "https://help.mediavine.com/mediavine-official", + "note": null + }, + { + "metric": "Google standing", + "comparator": "must be in good standing", + "amount": null, + "unit": "AdSense/Ad Exchange policies", + "period": "ongoing", + "scope": "account", + "program": "Official", + "sourceUrl": "https://help.mediavine.com/mediavine-official", + "note": null + }, + { + "metric": "Traffic source/geography", + "comparator": "reviewed; no fixed share published", + "amount": null, + "unit": "source and country composition", + "period": "review", + "scope": "site", + "program": "Official", + "sourceUrl": "https://help.mediavine.com/mediavine-official", + "note": null + } + ], + "observations": [ + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/1wz7cw6", + "publishedAt": "2026", + "site": "Unidentified publisher", + "niche": "Not stated", + "traffic": null, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "Poster said they expected Official eligibility based on prior-year earnings but application path routed them to Journey; they were 45 days into Journey.", + "limits": "Anonymous; exact revenue and site quality/country data not provided; app routing may have changed." + }, + { + "sourceUrl": "https://www.reddit.com/r/Blogging/comments/1s7kf5e", + "publishedAt": "2026", + "site": "Norwegian local site", + "niche": "Local popular site; niche not stated", + "traffic": { + "value": 12046, + "metric": "pageviews", + "period": "first 5 days after network acceptance" + }, + "adRevenueMonthlyUsd": null, + "countries": [ + "Norway" + ], + "decision": "Poster reported acceptance to a Mediavine-branded program and $41.47 revenue from those first five days; the program tier (Official vs Journey) was not specified.", + "limits": "Very early five-day result and program unspecified; not a revenue forecast or evidence against the Official prior-year gate." + }, + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/1xb1r9c", + "publishedAt": "2026", + "site": "Unidentified existing publisher", + "niche": "Not stated", + "traffic": { + "value": 1600000, + "metric": "monthly users", + "period": "reported during application discussion" + }, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "Publisher described repeated application declines and a 60-day reapply wait despite later traffic growth.", + "limits": "Exact application target tier, niche, geography and prior-year ad revenue not established." + } + ], + "inference": { + "trafficRange": null, + "revenueRange": { + "low": 5000, + "high": 5000, + "metric": "USD site ad revenue", + "period": "previous calendar year", + "basisSourceUrls": [ + "https://help.mediavine.com/programs-and-the-publisher-path-to-growth" + ], + "confidence": "high", + "note": "Exact Official gate, not monthly revenue." + }, + "practicalFit": "Shortlist for content publishers that can document $5k site ad revenue from the previous calendar year and pass quality review. Last month's revenue is only a planning estimate and cannot satisfy the exact criterion.", + "currentNetworkSignals": [ + "Journey acceptance is a separate path and does not prove Official eligibility." + ], + "geographyPreference": "No fixed share; traffic source and geography are reviewed.", + "agePreference": "No public age minimum found.", + "confidence": "high", + "rationale": "Current official Publisher Path specifies the previous calendar year, not last month or rolling 12 months. Reddit reports show routing and quality review can add discretion.", + "supportingSourceUrls": [ + "https://help.mediavine.com/programs-and-the-publisher-path-to-growth", + "https://help.mediavine.com/mediavine-official", + "https://help.mediavine.com/revenue-share", + "https://www.reddit.com/r/adops/comments/1wz7cw6" + ], + "gaps": [ + "One recent accepted case did not specify Official versus Journey.", + "Anonymous application reports do not expose review inputs; they cannot establish an acceptance rate.", + "Do not use last-month earnings as an exact substitute for prior-year total." + ] + }, + "sources": [ + { + "url": "https://help.mediavine.com/programs-and-the-publisher-path-to-growth", + "title": "Programs and Publisher Path", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "$5k based on previous calendar year" + ] + }, + { + "url": "https://help.mediavine.com/mediavine-official", + "title": "Mediavine Official criteria", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "content and Google standing" + ] + }, + { + "url": "https://help.mediavine.com/revenue-share", + "title": "Revenue share", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "new 2026 tier shares; legacy differs" + ] + }, + { + "url": "https://help.mediavine.com/when-am-i-getting-paid-0", + "title": "Payment timing", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "Net65" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/1wz7cw6", + "title": "Official application routing discussion", + "kind": "publisher_forum", + "publishedAt": "2026", + "checkedAt": "2026-10-22", + "claims": [ + "poster claimed previous-year revenue above $5k and was routed to Journey" + ] + }, + { + "url": "https://www.reddit.com/r/Blogging/comments/1s7kf5e", + "title": "New Mediavine-branded account start", + "kind": "publisher_forum", + "publishedAt": "2026", + "checkedAt": "2026-10-22", + "claims": [ + "Norway site and first five-day results; program tier unclear" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/1xb1r9c", + "title": "Publisher reapplication complaint", + "kind": "publisher_forum", + "publishedAt": "2026-10-21", + "checkedAt": "2026-10-22", + "claims": [ + "1.6m monthly users and repeated declines; tier/niche unclear" + ] + } + ] + }, + { + "slug": "mgid", + "checkedAt": "2026-10-22", + "productType": "Native advertising and recommendation widget network", + "applicationUrl": "https://www.mgid.com/publishers", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Traffic", + "value": "3,000 unique visitors daily OR 90,000 monthly visitors", + "note": "Official publisher help lists either route.", + "sourceUrl": "https://help.mgid.com/publishers-general-information" + }, + { + "label": "Publisher share", + "value": "65% in Brazil offer", + "note": "Offer-specific; current Insertion Order controls global terms.", + "sourceUrl": "https://pr.mgid.com/monetize" + }, + { + "label": "Payment minimum", + "value": "$50–$1,000", + "note": "Method-specific in Brazil offer; not a universal threshold.", + "sourceUrl": "https://pr.mgid.com/monetize" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "3,000 daily unique visitors OR 90,000 monthly visitors.", + "sourceUrl": "https://help.mgid.com/publishers-general-information" + }, + { + "label": "Content", + "value": "10 current articles; original, policy compliant, no adult/torrent/redirect/low-info content.", + "sourceUrl": "https://help.mgid.com/publishers-general-information" + }, + { + "label": "Geography", + "value": "No traffic-source/country limitation in help; social visitors accepted; 70+ languages/200+ countries.", + "sourceUrl": "https://help.mgid.com/publishers-general-information" + }, + { + "label": "Review", + "value": "Usually email response within 24 hours; weekend to next business day.", + "sourceUrl": "https://help.mgid.com/publishers-general-information" + } + ], + "revenueShare": "65% in Brazil offer; current insertion order controls", + "paymentTerms": "Net30 post-payment in Brazil offer; current insertion order controls", + "paymentThreshold": "Offer-specific: $50 Paymaster24; $100 PayPal/Tipalti; $1,000 ACH/international transfer", + "paymentMethods": [ + "Paymaster24", + "PayPal", + "Tipalti", + "ACH", + "International transfer" + ], + "sources": [ + { + "label": "Publisher information", + "url": "https://help.mgid.com/publishers-general-information" + }, + { + "label": "Publisher terms updated July 2026", + "url": "https://www.mgid.com/services/publishers-tos" + }, + { + "label": "Brazil publisher offer", + "url": "https://pr.mgid.com/monetize" + }, + { + "label": "Publisher program", + "url": "https://www.mgid.com/publishers" + } + ] + }, + "fit": { + "publisherTypes": [ + "content-rich sites with article pages and willingness to add recommendation units" + ], + "nichesStrong": [ + "news", + "editorial", + "entertainment and international content" + ], + "nichesWeak": [ + "thin content, adult, piracy/torrent and redirect sites" + ], + "geographies": [ + "Global; 70+ languages and 200+ countries supported" + ], + "role": "supplemental", + "entryPositioning": "Published gate is 3,000 daily unique visitors OR 90,000 monthly visitors, plus at least 10 current articles.", + "compatibilityNotes": [ + "Official publisher materials allow use with AdSense; placement and ad-density rules still apply. Native unit is supplemental to display demand." + ] + }, + "officialRequirements": [ + { + "metric": "Daily unique visitors", + "comparator": "minimum", + "amount": 3000, + "unit": "unique visitors", + "period": "day", + "scope": "site", + "program": "MGID", + "sourceUrl": "https://help.mgid.com/publishers-general-information", + "note": null + }, + { + "metric": "Monthly visitors", + "comparator": "alternative minimum", + "amount": 90000, + "unit": "visitors", + "period": "month", + "scope": "site", + "program": "MGID", + "sourceUrl": "https://help.mgid.com/publishers-general-information", + "note": null + }, + { + "metric": "Current articles", + "comparator": "minimum", + "amount": 10, + "unit": "articles", + "period": "current", + "scope": "site", + "program": "MGID", + "sourceUrl": "https://help.mgid.com/publishers-general-information", + "note": null + }, + { + "metric": "Content", + "comparator": "must exclude", + "amount": null, + "unit": "adult/torrent/redirect/low-information and policy-prohibited", + "period": "ongoing", + "scope": "site", + "program": "MGID", + "sourceUrl": "https://help.mgid.com/publishers-general-information", + "note": null + } + ], + "observations": [ + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/1bt3vnt", + "publishedAt": "2024", + "site": "Unidentified publisher", + "niche": "Not stated", + "traffic": { + "value": 287000, + "metric": "views/impressions (poster wording unclear)", + "period": "March" + }, + "adRevenueMonthlyUsd": 261, + "countries": [], + "decision": "Poster reported about $261 earnings for 287k March views/impressions.", + "limits": "Traffic unit is ambiguous; no niche/geography; not a traffic-entry case." + }, + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/1vkueiv", + "publishedAt": "2026", + "site": "Unidentified web app", + "niche": "Web app", + "traffic": { + "value": 20000, + "metric": "monthly active users", + "period": "20k–30k" + }, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "Poster asked whether MGID was suitable; no onboarding result.", + "limits": "No application or publisher outcome." + } + ], + "inference": { + "trafficRange": { + "low": 90000, + "high": 90000, + "metric": "visitors", + "period": "month", + "basisSourceUrls": [ + "https://help.mgid.com/publishers-general-information" + ], + "confidence": "high", + "note": "Alternative to 3k unique visitors per day." + }, + "revenueRange": null, + "practicalFit": "A measurable supplemental shortlist for content sites with at least 3k daily uniques or 90k monthly visitors and 10 current articles. Do not substitute pageviews or sessions for the published visitor metric.", + "currentNetworkSignals": [ + "Official materials say AdSense can be used alongside MGID; current terms/placements still control." + ], + "geographyPreference": "Global; support materials cite 70+ languages and 200+ countries.", + "agePreference": "No public age minimum found.", + "confidence": "high", + "rationale": "Current official help is clear on alternatives, article count, content exclusions and review time; revenue anecdote has ambiguous traffic unit.", + "supportingSourceUrls": [ + "https://help.mgid.com/publishers-general-information", + "https://www.mgid.com/services/publishers-tos", + "https://pr.mgid.com/monetize" + ], + "gaps": [ + "Payout/share figures from public Brazil offer are not universal; signed IO governs.", + "No accepted entry example with exact traffic and niche found.", + "Do not convert ambiguous views/impressions into users." + ] + }, + "sources": [ + { + "url": "https://help.mgid.com/publishers-general-information", + "title": "Publisher general information", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "3k daily uniques OR 90k monthly visitors", + "10 articles", + "geography/language and content rules" + ] + }, + { + "url": "https://www.mgid.com/services/publishers-tos", + "title": "Publisher terms", + "kind": "official_terms", + "publishedAt": "2026-07-29", + "checkedAt": "2026-10-22", + "claims": [ + "insertion order controls conflicting terms" + ] + }, + { + "url": "https://pr.mgid.com/monetize", + "title": "Brazil publisher offer", + "kind": "official_offer", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "65% share, Net30, method thresholds are offer-specific" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/1bt3vnt", + "title": "Publisher revenue question", + "kind": "publisher_forum", + "publishedAt": "2024", + "checkedAt": "2026-10-22", + "claims": [ + "$261 for ambiguous 287k views/impressions" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/1vkueiv", + "title": "Web app inquiry", + "kind": "publisher_forum", + "publishedAt": "2026", + "checkedAt": "2026-10-22", + "claims": [ + "20–30k monthly active users but no application result" + ] + } + ] + }, + { + "slug": "monetizemore-pubguru", + "checkedAt": "2026-10-22", + "productType": "Managed ad optimization and header-bidding service (PubGuru Premium)", + "applicationUrl": "https://www.monetizemore.com/solutions/pubguru-premium/", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "PubGuru Premium gate", + "value": "$5,000 monthly ad revenue OR 2m monthly pageviews", + "note": "Premium product criteria, not every MonetizeMore service.", + "sourceUrl": "https://www.monetizemore.com/solutions/pubguru-premium/" + }, + { + "label": "Revenue share", + "value": "Custom performance-based share", + "note": "Rate not public.", + "sourceUrl": "https://www.monetizemore.com/frequently-asked-questions/" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "PubGuru Premium: 2m monthly PV OR $5k monthly ad revenue.", + "sourceUrl": "https://www.monetizemore.com/solutions/pubguru-premium/" + }, + { + "label": "Product fit", + "value": "Managed yield optimization for larger, growing publishers.", + "sourceUrl": "https://www.monetizemore.com/solutions/pubguru-premium/" + }, + { + "label": "Terms", + "value": "Share and contract scope are set per publisher; confirm lock-in/notice in signed agreement.", + "sourceUrl": "https://www.monetizemore.com/frequently-asked-questions/" + } + ], + "revenueShare": "Custom performance share; no fixed percentage public", + "paymentTerms": null, + "paymentThreshold": null, + "paymentMethods": [], + "sources": [ + { + "label": "PubGuru Premium requirements", + "url": "https://www.monetizemore.com/solutions/pubguru-premium/" + }, + { + "label": "MonetizeMore FAQ", + "url": "https://www.monetizemore.com/frequently-asked-questions/" + }, + { + "label": "Publisher case", + "url": "https://www.monetizemore.com/case-study/if-publab-can-5x-their-ad-revenue-using-pubguru-so-can-you/" + } + ], + "joinSummary": "$5,000 monthly ad revenue OR 2 million monthly pageviews" + }, + "fit": { + "publisherTypes": [ + "large web publishers and multi-site portfolios" + ], + "nichesStrong": [ + "content publishers", + "recipes/food", + "international site portfolios" + ], + "nichesWeak": [ + "small sites below Premium scale" + ], + "geographies": [ + "No public share minimum; vendor cases include US and international publishers" + ], + "role": "infrastructure", + "entryPositioning": "Premium has explicit alternative gates: $5k monthly ad revenue OR 2m monthly PV. This is for PubGuru Premium, not every product.", + "compatibilityNotes": [ + "Managed header bidding/yield service can work with existing GAM/demand; confirm exclusivity and notice period in agreement." + ] + }, + "officialRequirements": [ + { + "metric": "Monthly ad revenue", + "comparator": "minimum OR PV alternative", + "amount": 5000, + "unit": "USD", + "period": "month", + "scope": "publisher", + "program": "PubGuru Premium", + "sourceUrl": "https://www.monetizemore.com/solutions/pubguru-premium/", + "note": null + }, + { + "metric": "Monthly pageviews", + "comparator": "minimum OR revenue alternative", + "amount": 2000000, + "unit": "pageviews", + "period": "month", + "scope": "publisher", + "program": "PubGuru Premium", + "sourceUrl": "https://www.monetizemore.com/solutions/pubguru-premium/", + "note": null + }, + { + "metric": "Revenue share", + "comparator": "custom", + "amount": null, + "unit": "publisher-specific share", + "period": "contract", + "scope": "publisher", + "program": "PubGuru", + "sourceUrl": "https://www.monetizemore.com/frequently-asked-questions/", + "note": null + } + ], + "observations": [ + { + "sourceUrl": "https://www.monetizemore.com/case-study/if-publab-can-5x-their-ad-revenue-using-pubguru-so-can-you/", + "publishedAt": null, + "site": "European multi-site publisher / Publab", + "niche": "Multi-site publishing portfolio", + "traffic": { + "value": 100000000, + "metric": "monthly visitors", + "period": "reported at scale" + }, + "adRevenueMonthlyUsd": { + "value": 300000, + "currency": "EUR", + "period": "monthly" + }, + "countries": [ + "Europe" + ], + "decision": "Vendor case describes a portfolio with 20+ sites and more than 100m monthly visitors and reports revenue growth after PubGuru.", + "limits": "Vendor case study, not independent; very large portfolio and not entry example." + }, + { + "sourceUrl": "https://www.monetizemore.com/case-study/200-increase-from-adsense-only-setups-with-panlasangpinoy/", + "publishedAt": "2019-2021", + "site": "Panlasang Pinoy", + "niche": "Food/recipe", + "traffic": { + "value": 53500000, + "metric": "pageviews", + "period": "2019; 88.7m in 2020 and 70.5m in 2021" + }, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "Vendor case says managed setup increased net ad revenue versus AdSense-only baseline.", + "limits": "Historical vendor case, not a typical result or application threshold." + } + ], + "inference": { + "trafficRange": { + "low": 2000000, + "high": 2000000, + "metric": "pageviews", + "period": "month", + "basisSourceUrls": [ + "https://www.monetizemore.com/solutions/pubguru-premium/" + ], + "confidence": "high", + "note": "Alternative qualifying route is $5k monthly ad revenue." + }, + "revenueRange": { + "low": 5000, + "high": 5000, + "metric": "USD ad revenue", + "period": "month", + "basisSourceUrls": [ + "https://www.monetizemore.com/solutions/pubguru-premium/" + ], + "confidence": "high", + "note": "Premium alternative to 2m monthly PV." + }, + "practicalFit": "Shortlist when a publisher can verify either 2m monthly pageviews or $5k monthly ad revenue and needs managed yield optimization. A solo blog below both is not a PubGuru Premium fit.", + "currentNetworkSignals": [ + "Use of GAM or other demand partners can aid setup; not transitive proof of qualification." + ], + "geographyPreference": "No public country rule found.", + "agePreference": "No public age minimum found.", + "confidence": "high", + "rationale": "Current PubGuru Premium page explicitly publishes both thresholds. Case studies confirm very large publisher profile but are vendor-reported.", + "supportingSourceUrls": [ + "https://www.monetizemore.com/solutions/pubguru-premium/", + "https://www.monetizemore.com/frequently-asked-questions/", + "https://www.monetizemore.com/case-study/if-publab-can-5x-their-ad-revenue-using-pubguru-so-can-you/" + ], + "gaps": [ + "No independent first-person acceptance example with traffic/revenue found.", + "Revenue share and payment terms are not public; contract must be reviewed.", + "Do not confuse general MonetizeMore service or PubGuru product pages with Premium criteria." + ] + }, + "sources": [ + { + "url": "https://www.monetizemore.com/solutions/pubguru-premium/", + "title": "PubGuru Premium", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "$5k/month or 2m PV", + "product-specific gate" + ] + }, + { + "url": "https://www.monetizemore.com/frequently-asked-questions/", + "title": "MonetizeMore FAQ", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "share/terms privately agreed" + ] + }, + { + "url": "https://www.monetizemore.com/case-study/if-publab-can-5x-their-ad-revenue-using-pubguru-so-can-you/", + "title": "Publab case", + "kind": "vendor_case_study", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "20+ sites, 100m+ visitors, €300k/month reported" + ] + }, + { + "url": "https://www.monetizemore.com/case-study/200-increase-from-adsense-only-setups-with-panlasangpinoy/", + "title": "Panlasang Pinoy case", + "kind": "vendor_case_study", + "publishedAt": "2019-2021", + "checkedAt": "2026-10-22", + "claims": [ + "recipe publisher history and PV scale" + ] + } + ] + }, + { + "slug": "monumetric", + "checkedAt": "2026-10-22", + "productType": "Managed publisher ad network with program tiers and Propel entry program", + "applicationUrl": "https://www.monumetric.com/get-started/", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Propel traffic", + "value": "10,000–80,000 pageviews/month", + "note": "At least 3 consecutive months; other programs have higher ranges.", + "sourceUrl": "https://www.monumetric.com/monumetric-program-overview/" + }, + { + "label": "Payment minimum", + "value": "$10", + "note": "Balance carries forward if below minimum.", + "sourceUrl": "https://www.monumetric.com/payment-terms-and-how-you-are-paid/" + }, + { + "label": "Pay day", + "value": "Net 60", + "note": "Paid monthly within first 10 business days.", + "sourceUrl": "https://www.monumetric.com/payment-terms-and-how-you-are-paid/" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "10k–80k PV/month for Propel for 3 consecutive months.", + "note": "No single-month shortcut.", + "sourceUrl": "https://www.monumetric.com/monumetric-program-overview/" + }, + { + "label": "Top markets", + "value": "At least 50% US/UK/Australia/Canada.", + "sourceUrl": "https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/" + }, + { + "label": "Content", + "value": "English; no pornography, drugs, hate or copyright violations.", + "sourceUrl": "https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/" + }, + { + "label": "Propel setup", + "value": "WordPress or Blogger, 300px sidebar, six ad slots, major-ad-provider approval, $99 implementation fee.", + "sourceUrl": "https://www.monumetric.com/requirements-for-the-propel-program/" + } + ], + "revenueShare": null, + "paymentTerms": "Net 60; monthly within first 10 business days", + "paymentThreshold": "$10", + "paymentMethods": [ + "US direct deposit", + "International PayPal" + ], + "sources": [ + { + "label": "Program overview", + "url": "https://www.monumetric.com/monumetric-program-overview/" + }, + { + "label": "Eligibility", + "url": "https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/" + }, + { + "label": "Propel requirements", + "url": "https://www.monumetric.com/requirements-for-the-propel-program/" + }, + { + "label": "Payment terms", + "url": "https://www.monumetric.com/payment-terms-and-how-you-are-paid/" + } + ], + "joinSummary": "10,000 pageviews/month for 3 consecutive months (Propel)" + }, + "fit": { + "publisherTypes": [ + "small-to-large English-language content publishers" + ], + "nichesStrong": [ + "personal finance", + "food", + "travel", + "lifestyle and informational blogs" + ], + "nichesWeak": [ + "non-English sites or sites with low target-country share" + ], + "geographies": [ + "At least 50% from US, UK, Australia or Canada" + ], + "role": "primary", + "entryPositioning": "Propel starts at 10k monthly pageviews for three consecutive months; setup is limited to WordPress/Blogger and includes a $99 implementation fee.", + "compatibilityNotes": [ + "Managed ad placements; confirm current scope before combining with an existing display partner. Propel requires six slots and major-ad-provider approval." + ] + }, + "officialRequirements": [ + { + "metric": "Monthly pageviews", + "comparator": "minimum", + "amount": 10000, + "unit": "pageviews", + "period": "month for 3 consecutive months", + "scope": "Propel", + "program": "Monumetric", + "sourceUrl": "https://www.monumetric.com/monumetric-program-overview/", + "note": null + }, + { + "metric": "Monthly pageviews", + "comparator": "program range", + "amount": 80000, + "unit": "pageviews", + "period": "month for 3 consecutive months", + "scope": "Propel upper tier boundary", + "program": "Monumetric", + "sourceUrl": "https://www.monumetric.com/monumetric-program-overview/", + "note": null + }, + { + "metric": "Top-market audience", + "comparator": "minimum", + "amount": 50, + "unit": "percent", + "period": "of traffic", + "scope": "US/UK/Australia/Canada", + "program": "Monumetric", + "sourceUrl": "https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/", + "note": null + }, + { + "metric": "Platform", + "comparator": "requires", + "amount": null, + "unit": "WordPress or Blogger", + "period": "application", + "scope": "Propel", + "program": "Monumetric", + "sourceUrl": "https://www.monumetric.com/requirements-for-the-propel-program/", + "note": null + }, + { + "metric": "Ad slots", + "comparator": "minimum", + "amount": 6, + "unit": "placements", + "period": "desktop and mobile", + "scope": "Propel", + "program": "Monumetric", + "sourceUrl": "https://www.monumetric.com/requirements-for-the-propel-program/", + "note": null + }, + { + "metric": "Implementation fee", + "comparator": "required", + "amount": 99, + "unit": "USD", + "period": "one-time", + "scope": "Propel", + "program": "Monumetric", + "sourceUrl": "https://www.monumetric.com/requirements-for-the-propel-program/", + "note": null + } + ], + "observations": [ + { + "sourceUrl": "https://perfectionhangover.com/5-financial-adjustments-to-make-if-youve-been-laid-off-from-work/", + "publishedAt": "2020-06-17", + "site": "Perfection Hangover", + "niche": "Personal finance", + "traffic": { + "value": 10000, + "metric": "pageviews", + "period": "reached in fourth month blogging" + }, + "adRevenueMonthlyUsd": 436, + "countries": [ + "United States" + ], + "decision": "Publisher said she waited until about month 12 to apply after reaching 10k PV in month four; reported $436 first-month Monumetric earnings in Feb. 2019.", + "limits": "Historical single publisher report, not current approval promise or typical earnings. Traffic was from a personal-finance blog; country mix not reported." + } + ], + "inference": { + "trafficRange": { + "low": 10000, + "high": 80000, + "metric": "pageviews", + "period": "month", + "basisSourceUrls": [ + "https://www.monumetric.com/monumetric-program-overview/" + ], + "confidence": "high", + "note": "Propel range; requires three consecutive months; higher Monumetric tiers exist." + }, + "revenueRange": null, + "practicalFit": "Useful small-blog option when 10k PV has held for three consecutive months, target-country traffic is over half, and the site can pay the $99 Propel fee and use required ad slots.", + "currentNetworkSignals": [ + "Existing ad-provider approval is an explicit Propel condition but does not guarantee Monumetric acceptance." + ], + "geographyPreference": "At least 50% from US/UK/Australia/Canada.", + "agePreference": "No public age rule found.", + "confidence": "high", + "rationale": "Current overview gives tier ranges and three-month history. A dated personal-finance blogger reported reaching 10k in month four but applied around month twelve; earnings are historical.", + "supportingSourceUrls": [ + "https://www.monumetric.com/monumetric-program-overview/", + "https://www.monumetric.com/requirements-for-the-propel-program/", + "https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/", + "https://perfectionhangover.com/5-financial-adjustments-to-make-if-youve-been-laid-off-from-work/" + ], + "gaps": [ + "No current acceptance report at the threshold with full geo and content details.", + "Historical $436 month is not a forecast.", + "No public revenue-share percentage found." + ] + }, + "sources": [ + { + "url": "https://www.monumetric.com/monumetric-program-overview/", + "title": "Program overview", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "Propel 10k–80k PV for three months; higher tiers" + ] + }, + { + "url": "https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/", + "title": "General requirements", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "50% target countries", + "English and prohibited topics" + ] + }, + { + "url": "https://www.monumetric.com/requirements-for-the-propel-program/", + "title": "Propel program requirements", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "WordPress/Blogger", + "sidebar", + "six ad slots", + "$99 fee" + ] + }, + { + "url": "https://www.monumetric.com/payment-terms-and-how-you-are-paid/", + "title": "Payment terms", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "Net60", + "$10", + "methods" + ] + }, + { + "url": "https://perfectionhangover.com/5-financial-adjustments-to-make-if-youve-been-laid-off-from-work/", + "title": "Publisher's personal-finance monetization history", + "kind": "publisher_blog", + "publishedAt": "2020-06-17", + "checkedAt": "2026-10-22", + "claims": [ + "10k PV by month four; applied at month 12; $436 Feb 2019 first month" + ] + } + ] + }, + { + "slug": "newor-media", + "checkedAt": "2026-10-22", + "productType": "Exclusive managed display monetization with Elevate, Catapult and Premier tiers", + "applicationUrl": "https://newormedia.com/programs", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Catapult traffic", + "value": "60,000 US pageviews/month", + "note": "Program-specific; Elevate has no numeric minimum.", + "sourceUrl": "https://newormedia.com/programs" + }, + { + "label": "Premier traffic", + "value": "420,000 US pageviews/month", + "note": "Premier only.", + "sourceUrl": "https://newormedia.com/programs" + }, + { + "label": "Pay timing", + "value": "Net 30 / Net 45", + "note": "Public FAQ says Net30; platform agreement says Net45—signed contract controls.", + "sourceUrl": "https://newormedia.com/faqs/what-are-your-payment-terms" + } + ], + "joining": [ + { + "label": "Elevate traffic", + "value": "No pageview minimum; manual review.", + "note": "Current Elevate FAQ.", + "sourceUrl": "https://newormedia.com/elevatefaqs" + }, + { + "label": "Catapult/Premier", + "value": "60k and 420k US PV/month respectively.", + "sourceUrl": "https://newormedia.com/programs" + }, + { + "label": "Elevate criteria", + "value": "English site, navigation, Google policy alignment, at least two ad units/page, GAM account and exclusivity.", + "sourceUrl": "https://newormedia.com/elevatefaqs" + }, + { + "label": "Language conflict", + "value": "Aug 2025 blog says non-English sites may be accepted with 50% US/UK/Canada/Australia traffic; current Elevate FAQ says sites must be English.", + "note": "Program-specific FAQ is current; confirm in writing.", + "sourceUrl": "https://newormedia.com/blog/ad-monetization-onboarding-with-newor-media/" + } + ], + "revenueShare": null, + "paymentTerms": "Net30 in FAQ; Net45 in platform agreement", + "paymentThreshold": null, + "paymentMethods": [ + "PayPal", + "Payoneer", + "Direct wire transfer" + ], + "sources": [ + { + "label": "Programs", + "url": "https://newormedia.com/programs" + }, + { + "label": "Elevate FAQ", + "url": "https://newormedia.com/elevatefaqs" + }, + { + "label": "2025 onboarding blog", + "url": "https://newormedia.com/blog/ad-monetization-onboarding-with-newor-media/" + }, + { + "label": "Platform agreement", + "url": "https://newormedia.com/node/296" + }, + { + "label": "Payment terms FAQ", + "url": "https://newormedia.com/faqs/what-are-your-payment-terms" + } + ], + "joinSummary": "Elevate: no pageview minimum, but manual review, English, GAM and exclusivity" + }, + "fit": { + "publisherTypes": [ + "developing English sites with ad-manager readiness", + "established publishers with US pageview scale" + ], + "nichesStrong": [ + "long-form blogs", + "sports", + "gaming", + "niche content" + ], + "nichesWeak": [ + "non-English sites under current Elevate FAQ", + "publishers unwilling to use exclusive display" + ], + "geographies": [ + "Catapult/Premier gates count US pageviews; Elevate review considers traffic origin; 2025 blog states 50% Tier1 for non-English but conflicts with current FAQ" + ], + "role": "primary", + "entryPositioning": "Elevate has no numeric PV minimum but requires manual review, English, GAM, two ad units per page and exclusivity. Catapult/Premier publish US PV thresholds.", + "compatibilityNotes": [ + "Newor requires exclusive display monetization; cannot run other networks or direct display sales on the same website during term." + ] + }, + "officialRequirements": [ + { + "metric": "Monthly US pageviews", + "comparator": "minimum", + "amount": 60000, + "unit": "pageviews", + "period": "month", + "scope": "Catapult", + "program": "Newor Media", + "sourceUrl": "https://newormedia.com/programs", + "note": null + }, + { + "metric": "Monthly US pageviews", + "comparator": "minimum", + "amount": 420000, + "unit": "pageviews", + "period": "month", + "scope": "Premier", + "program": "Newor Media", + "sourceUrl": "https://newormedia.com/programs", + "note": null + }, + { + "metric": "Pageviews", + "comparator": "no minimum; manual review", + "amount": 0, + "unit": "pageviews", + "period": "not stated", + "scope": "Elevate", + "program": "Newor Media", + "sourceUrl": "https://newormedia.com/elevatefaqs", + "note": null + }, + { + "metric": "Language", + "comparator": "requires English", + "amount": null, + "unit": "site language", + "period": "ongoing", + "scope": "Elevate", + "program": "Newor Media", + "sourceUrl": "https://newormedia.com/elevatefaqs", + "note": null + }, + { + "metric": "Ad units", + "comparator": "minimum", + "amount": 2, + "unit": "ad units", + "period": "per page", + "scope": "Elevate", + "program": "Newor Media", + "sourceUrl": "https://newormedia.com/elevatefaqs", + "note": null + }, + { + "metric": "GAM", + "comparator": "requires", + "amount": null, + "unit": "Google Ad Manager account", + "period": "onboarding", + "scope": "Elevate", + "program": "Newor Media", + "sourceUrl": "https://newormedia.com/elevatefaqs", + "note": null + }, + { + "metric": "Exclusivity", + "comparator": "requires", + "amount": null, + "unit": "exclusive display monetization", + "period": "contract", + "scope": "all sites", + "program": "Newor Media", + "sourceUrl": "https://newormedia.com/elevatefaqs", + "note": null + } + ], + "observations": [ + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/1vkm7no/skip_newor_media_by_any_means_possible/", + "publishedAt": "2026-10-21", + "site": "Two unnamed content blogs", + "niche": "Human-written informational content", + "traffic": { + "value": 10000, + "metric": "sessions", + "period": "about per month per site" + }, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "Poster said both blogs were accepted by AdSense and Journey but rejected by Newor; another commenter reported rejection at 40k monthly sessions.", + "limits": "Anonymous; no niche/country split or reason. Sessions are not Newor's published US pageview metric." + }, + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/t8wisu", + "publishedAt": "2022", + "site": "Unnamed finance site", + "niche": "Finance", + "traffic": { + "value": 40000, + "metric": "monthly visitors", + "period": "publisher reported 40k–60k" + }, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "Poster reported Newor acceptance; comments described ad placements and a $13.29 eCPM.", + "limits": "Old anonymous report; visitor unit unclear and conditions may have changed." + } + ], + "inference": { + "trafficRange": { + "low": 60000, + "high": 420000, + "metric": "US pageviews", + "period": "month", + "basisSourceUrls": [ + "https://newormedia.com/programs" + ], + "confidence": "high", + "note": "Published Catapult and Premier tiers; Elevate has no numeric minimum." + }, + "revenueRange": null, + "practicalFit": "Elevate can be considered below typical managed-network scale only when the publisher accepts exclusivity and can run GAM plus two ads/page. The lack of a PV floor does not imply easy approval: 2026 reports describe rejection around 10k and 40k sessions. Catapult/Premier are clearer for US-PV scale.", + "currentNetworkSignals": [ + "Recent posters said AdSense and Journey acceptance did not transfer; they were still rejected by Newor." + ], + "geographyPreference": "US PV thresholds for larger programs; Elevate reviews traffic origin; English rule conflicts with older blog.", + "agePreference": "No public age rule found.", + "confidence": "medium", + "rationale": "Current program page and FAQ conflict with a 2025 general onboarding blog. Recent firsthand rejections show manual review can screen out sites under the no-minimum Elevate promise.", + "supportingSourceUrls": [ + "https://newormedia.com/programs", + "https://newormedia.com/elevatefaqs", + "https://newormedia.com/blog/ad-monetization-onboarding-with-newor-media/", + "https://www.reddit.com/r/adops/comments/1vkm7no/skip_newor_media_by_any_means_possible/" + ], + "gaps": [ + "Resolve current English-only FAQ against 2025 claim that non-English can pass with 50% Tier1.", + "Resolve Net30 FAQ vs Net45 agreement using signed IO.", + "Publisher anecdotes are anonymous and sessions do not map to posted US PV thresholds." + ] + }, + "sources": [ + { + "url": "https://newormedia.com/programs", + "title": "Current publisher programs", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "Catapult 60k US PV", + "Premier 420k US PV" + ] + }, + { + "url": "https://newormedia.com/elevatefaqs", + "title": "Elevate FAQ", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "no PV min", + "English/GAM/two ads", + "exclusivity", + "manual review" + ] + }, + { + "url": "https://newormedia.com/blog/ad-monetization-onboarding-with-newor-media/", + "title": "Onboarding article", + "kind": "official_blog", + "publishedAt": "2025-08-11", + "checkedAt": "2026-10-22", + "claims": [ + "10k display/30k AIVision PV; 50% Tier1 for non-English; conflicts with current FAQ" + ] + }, + { + "url": "https://newormedia.com/node/296", + "title": "Publisher platform agreement", + "kind": "official_terms", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "exclusive display terms and Net45 agreement language" + ] + }, + { + "url": "https://newormedia.com/faqs/what-are-your-payment-terms", + "title": "Payment terms FAQ", + "kind": "official", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "Net30 FAQ" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/1vkm7no/skip_newor_media_by_any_means_possible/", + "title": "Newor rejections", + "kind": "publisher_forum", + "publishedAt": "2026-10-21", + "checkedAt": "2026-10-22", + "claims": [ + "two blogs at about 10k sessions and separate 40k session rejection" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/t8wisu", + "title": "Newor finance publisher report", + "kind": "publisher_forum", + "publishedAt": "2022", + "checkedAt": "2026-10-22", + "claims": [ + "40–60k visitors and claimed acceptance; older anonymous report" + ] + } + ] + } +] diff --git a/content_docs/ad-networks/recommendation-profiles-b.json b/content_docs/ad-networks/recommendation-profiles-b.json new file mode 100644 index 00000000..97848969 --- /dev/null +++ b/content_docs/ad-networks/recommendation-profiles-b.json @@ -0,0 +1,4949 @@ +[ + { + "slug": "nitropay", + "checkedAt": "2026-10-22", + "productType": "Managed web display monetization and ad operations", + "applicationUrl": "https://nitropay.com/publishers/", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Pay day", + "value": "Net 7", + "sourceUrl": "https://nitropay.com/docs/" + }, + { + "label": "Payout minimum", + "value": "None", + "note": "above transaction fees", + "sourceUrl": "https://nitropay.com/docs/" + }, + { + "label": "Go-live time", + "value": "5–7 business days", + "note": "after your site is accepted", + "sourceUrl": "https://nitropay.com/docs/" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "Traffic amount, pageviews and sessions are reviewed; no numeric minimum is published", + "sourceUrl": "https://nitropay.com/docs/" + }, + { + "label": "Visitor location", + "value": "Traffic geography is reviewed; accepted regions are not listed", + "sourceUrl": "https://nitropay.com/docs/" + }, + { + "label": "Content", + "value": "Site content and niche are reviewed; guidelines bar adult, illegal, violent, or infringing content", + "sourceUrl": "https://blog.nitropay.com/guidelines/" + }, + { + "label": "Google standing", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Must connect", + "value": "Install Nitro ad tags and provide a Google Ad Manager network code for Google MCM; GA4 access can speed review", + "sourceUrl": "https://nitropay.com/docs/" + }, + { + "label": "Approval time", + "value": "Initial review time not published; after quality acceptance it averages 5–7 business days to enough SSP coverage for go-live", + "sourceUrl": "https://nitropay.com/docs/", + "note": "Post-acceptance activation, not application approval." + } + ], + "revenueShare": null, + "paymentTerms": "Net 7; paid seven days after the start of each month", + "paymentThreshold": "No fixed minimum; earnings must exceed the transaction fee", + "paymentMethods": [ + "ACH (US)", + "EFT (Canada)", + "FPS (UK)", + "NPP (Australia)", + "BECS (New Zealand)", + "FPSHK (Hong Kong)", + "SEPA (Europe)", + "IACH", + "SWIFT wire" + ], + "sources": [ + { + "label": "Nitro Docs Archive: approval, onboarding, and payments", + "url": "https://nitropay.com/docs/" + }, + { + "label": "Publisher Guidelines", + "url": "https://blog.nitropay.com/guidelines/" + }, + { + "label": "Publisher application form", + "url": "https://nitropay.com/publishers/" + } + ] + }, + "fit": { + "publisherTypes": [ + "independent web publishers", + "gaming and enthusiast sites", + "single-page applications" + ], + "nichesStrong": [ + "gaming", + "interactive/enthusiast content" + ], + "nichesWeak": [], + "geographies": [ + "Traffic geography is reviewed; accepted-country list is not public" + ], + "role": "primary", + "entryPositioning": "Manual review; no public traffic or revenue floor. No evidence supports a numeric estimate.", + "compatibilityNotes": [ + "Confirm programmatic exclusivity; direct sales/affiliate placements may remain.", + "Mobile apps are not currently supported." + ] + }, + "officialRequirements": [ + { + "metric": "traffic amount", + "comparator": "reviewed; no numeric minimum stated", + "amount": null, + "unit": "pageviews and sessions", + "period": "not stated", + "scope": "website application", + "program": "NitroPay", + "sourceUrl": "https://nitropay.com/docs/", + "note": "Traffic location and content are also reviewed; GA4 access can speed review." + } + ], + "observations": [ + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/1vep1yo/gaming-site-getting-133-ad-revenue-despite-600k/", + "publishedAt": "2026-07 (approx.; relative date)", + "site": "anonymous downloadable-gaming site", + "niche": "gaming downloads", + "traffic": { + "value": 600000, + "metric": "pageviews; also 150,000 sessions", + "period": "30 days" + }, + "adRevenueMonthlyUsd": 133, + "countries": [ + "US about 16%", + "Germany, France, UK, Sweden and other Europe" + ], + "decision": "reported serving with NitroPay and $133 on 1M ad impressions", + "limits": "One site and one period; not a general RPM or entry estimate." + } + ], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Manual review favors usable analytics, clean content, and willingness to manage an ad-tech integration; gaming has the clearest fit evidence.", + "currentNetworkSignals": [ + "Current network membership does not prove NitroPay acceptance.", + "Check exclusive tag terms before recommending migration." + ], + "geographyPreference": "Reviewed but no preferred-country threshold published.", + "agePreference": "No site-age rule found.", + "confidence": "medium", + "rationale": "Official docs publish qualitative criteria but no floor; one gaming example has variable low revenue and cannot set a cutoff.", + "supportingSourceUrls": [ + "https://nitropay.com/docs/", + "https://www.reddit.com/r/adops/comments/1vep1yo/gaming-site-getting-133-ad-revenue-despite-600k/" + ], + "gaps": [ + "No public traffic/revenue floor or geo threshold.", + "No verified low-end successful application example." + ] + }, + "sources": [ + { + "url": "https://nitropay.com/docs/", + "title": "Nitro approval and integration docs", + "kind": "official help", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "traffic factors", + "GA4", + "mobile app support", + "go-live timing" + ] + }, + { + "url": "https://blog.nitropay.com/guidelines/", + "title": "Publisher Guidelines", + "kind": "official policy", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "content review" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/1vep1yo/gaming-site-getting-133-ad-revenue-despite-600k/", + "title": "Gaming site reports 600k views and $133", + "kind": "publisher firsthand", + "publishedAt": "2026-07", + "checkedAt": "2026-10-22", + "claims": [ + "traffic", + "countries", + "revenue" + ] + }, + { + "url": "https://nitropay.com/publishers/", + "title": "Publisher application form", + "kind": "official application", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "publisher application and traffic-band intake" + ] + } + ] + }, + { + "slug": "opti-digital", + "checkedAt": "2026-10-22", + "productType": "GAM monetization and yield platform with managed inventory, managed account, and demand tools", + "applicationUrl": "https://optidigital.com/request-demo/", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Pay day, Managed Inventory", + "value": "Net 45", + "sourceUrl": "https://knowledge-base.optidigital.com/knowledge/understanding-your-payment-terms" + }, + { + "label": "Pay day, Managed Account", + "value": "Net 60", + "note": "for Opti demand; Google pays its own revenue on a 25-day cycle", + "sourceUrl": "https://knowledge-base.optidigital.com/knowledge/understanding-your-payment-terms" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "No universal numeric minimum published", + "sourceUrl": "https://optidigital.com/request-demo/" + }, + { + "label": "Visitor location", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Content", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Google standing", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Must connect", + "value": "Demand Hub needs CMP, ads.txt, and bidder setup", + "note": "This is for the Demand Hub product; no general publisher sign-up requirement is stated.", + "sourceUrl": "https://knowledge-base.optidigital.com/knowledge/getting-started-with-demand-hub" + }, + { + "label": "Approval time", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Referral offer", + "value": "Referral-only conditions: tags live 3 months on most traffic, eligible geography, inventory quality, 3 ads/page, registered companies", + "sourceUrl": "https://optidigital.com/refer-a-publisher/" + } + ], + "revenueShare": "Share of gross programmatic revenue; percentage not public", + "paymentTerms": "Net 45 for Managed Inventory; Net 60 for Opti demand under Managed Account; Google pays direct on its 25-day cycle", + "paymentThreshold": null, + "paymentMethods": [], + "sources": [ + { + "label": "Payment terms by setup", + "url": "https://knowledge-base.optidigital.com/knowledge/understanding-your-payment-terms" + }, + { + "label": "Revenue-share and invoice flow", + "url": "https://knowledge-base.optidigital.com/knowledge/how-is-the-invoicing-working-at-opti-digital-when-will-i-get-paid" + }, + { + "label": "Demand Hub publisher integration", + "url": "https://knowledge-base.optidigital.com/knowledge/getting-started-with-demand-hub" + }, + { + "label": "Opti Digital publisher referral page (referral terms only)", + "url": "https://optidigital.com/refer-a-publisher/" + }, + { + "label": "Publisher monetization review", + "url": "https://optidigital.com/request-demo/" + } + ] + }, + "fit": { + "publisherTypes": [ + "publishers using Google Ad Manager", + "digital media groups", + "sales houses" + ], + "nichesStrong": [ + "digital publishing; fit depends on inventory" + ], + "nichesWeak": [], + "geographies": [ + "Referral offer requires eligible geographies; full list not public" + ], + "role": "infrastructure", + "entryPositioning": "Sales-led review of an existing ad stack; no public traffic/revenue range. Referral criteria are not universal admission rules.", + "compatibilityNotes": [ + "Managed Inventory can replace an existing managed path.", + "Managed Account leaves Google revenue paid directly by Google.", + "Demand Hub can add demand; confirm auction overlap." + ] + }, + "officialRequirements": [ + { + "metric": "traffic and revenue", + "comparator": "no universal numeric minimum published", + "amount": null, + "unit": "not stated", + "period": null, + "scope": "general publisher application", + "program": "Opti Digital", + "sourceUrl": "https://optidigital.com/request-demo/" + }, + { + "metric": "live tags/geography/quality/ads per page", + "comparator": "requirements for referral bonus only", + "amount": 3, + "unit": "ads per page", + "period": null, + "scope": "referral offer", + "program": "Opti Digital referral", + "sourceUrl": "https://optidigital.com/refer-a-publisher/", + "note": "Three months of live tags on most traffic; registered businesses." + } + ], + "observations": [ + { + "sourceUrl": "https://optidigital.com/resources/case-studies/how-1xl-unlocked-incremental-premium-demand-with-opti-digital/", + "publishedAt": "2026-05", + "site": "1XL (vendor case)", + "niche": "digital publishing", + "traffic": { + "value": null, + "metric": "not stated", + "period": null + }, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "case describes incremental premium PMP demand via Demand Hub", + "limits": "Vendor-authored; no traffic or entry outcome." + } + ], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Best for publishers already using GAM who want managed yield or incremental demand and can assess the contract.", + "currentNetworkSignals": [ + "Ask whether the publisher owns GAM and whether its current service is managed or self-operated.", + "Current network is context, not acceptance proof." + ], + "geographyPreference": "Referral offer names eligible geographies; no general preference published.", + "agePreference": "No age rule found.", + "confidence": "low", + "rationale": "Official sources establish products and payments but not general admission scale; independent entry evidence was not found.", + "supportingSourceUrls": [ + "https://optidigital.com/request-demo/", + "https://knowledge-base.optidigital.com/knowledge/understanding-your-payment-terms", + "https://optidigital.com/refer-a-publisher/" + ], + "gaps": [ + "No public universal admission floor.", + "No independent traffic-qualified application outcome." + ] + }, + "sources": [ + { + "url": "https://optidigital.com/request-demo/", + "title": "Publisher monetization review", + "kind": "official contact", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "sales-led route" + ] + }, + { + "url": "https://knowledge-base.optidigital.com/knowledge/understanding-your-payment-terms", + "title": "Payment terms by setup", + "kind": "official help", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "Managed Inventory Net 45", + "Managed Account Net 60", + "Google 25 days" + ] + }, + { + "url": "https://optidigital.com/refer-a-publisher/", + "title": "Refer a Publisher", + "kind": "official referral", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "referral-only rules" + ] + }, + { + "url": "https://optidigital.com/resources/case-studies/how-1xl-unlocked-incremental-premium-demand-with-opti-digital/", + "title": "1XL case study", + "kind": "vendor case", + "publishedAt": "2026-05", + "checkedAt": "2026-10-22", + "claims": [ + "supplemental demand" + ] + } + ] + }, + { + "slug": "playwire", + "checkedAt": "2026-10-22", + "productType": "Managed ad monetization platform for web, apps, and games", + "applicationUrl": "https://www.playwire.com/apply", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Traffic to join", + "value": "500,000", + "note": "monthly website pageviews; apps need 1,000 daily active users", + "sourceUrl": "https://www.playwire.com/faq" + }, + { + "label": "Your share", + "value": "50% / 75%", + "note": "of net direct-sales / indirect-sales revenue", + "sourceUrl": "https://www.playwire.com/terms-of-service" + }, + { + "label": "Pay day", + "value": "Net 60", + "sourceUrl": "https://www.playwire.com/terms-of-service" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "FAQ: 500,000 monthly pageviews or 1,000 app DAU; qualification page suggests applying around 100,000 PV for full ROI", + "note": "100K guidance is not a confirmed admission cutoff.", + "sourceUrl": "https://www.playwire.com/faq" + }, + { + "label": "Visitor location", + "value": "20% US traffic is linked to higher revenue, not a hard eligibility rule", + "note": "At least 20% US traffic is associated with higher average revenue, not stated as an eligibility minimum", + "sourceUrl": "https://www.playwire.com/qualification-criteria" + }, + { + "label": "Content", + "value": "Unique, original content; IVT rating no higher than 7%", + "sourceUrl": "https://www.playwire.com/faq" + }, + { + "label": "Google standing", + "value": "Not blacklisted by Google or other major ad providers", + "sourceUrl": "https://www.playwire.com/faq" + }, + { + "label": "Must connect", + "value": "Implement the Playwire SDK", + "note": "Required to access Playwire demand", + "sourceUrl": "https://www.playwire.com/faq" + }, + { + "label": "Approval time", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Application", + "value": "Apply Now branches by website/blog, mobile app, and desktop application.", + "sourceUrl": "https://www.playwire.com/apply" + } + ], + "revenueShare": "50% of net direct-sales revenue; 75% of net indirect-sales revenue", + "paymentTerms": "Net 60 after month-end; paid in US dollars", + "paymentThreshold": null, + "paymentMethods": [], + "sources": [ + { + "label": "Publisher FAQ", + "url": "https://www.playwire.com/faq" + }, + { + "label": "Qualification criteria", + "url": "https://www.playwire.com/qualification-criteria" + }, + { + "label": "Publisher terms of service", + "url": "https://www.playwire.com/terms-of-service" + }, + { + "label": "Apply Now page", + "url": "https://www.playwire.com/apply" + } + ] + }, + "fit": { + "publisherTypes": [ + "web publishers", + "mobile app publishers", + "gaming and entertainment publishers", + "education and tool sites" + ], + "nichesStrong": [ + "gaming", + "casual games", + "education/tools", + "entertainment", + "travel" + ], + "nichesWeak": [], + "geographies": [ + "20% US is revenue signal, not a gate" + ], + "role": "primary", + "entryPositioning": "FAQ states 500K monthly website PV or 1K app DAU; separate guidance suggests 100K PV for full ROI, not an admission rule.", + "compatibilityNotes": [ + "FAQ explicitly says AdSense and Ad Exchange ads cannot run alongside its script. Confirm other-provider compatibility in the agreement.", + "Treat as primary replacement, not additive bidder.", + "Quality and IVT also matter." + ] + }, + "officialRequirements": [ + { + "metric": "website pageviews", + "comparator": "at least", + "amount": 500000, + "unit": "pageviews", + "period": "month", + "scope": "website", + "program": "Playwire RAMP", + "sourceUrl": "https://www.playwire.com/faq" + }, + { + "metric": "app DAU", + "comparator": "at least", + "amount": 1000, + "unit": "daily active users", + "period": "day", + "scope": "app", + "program": "Playwire RAMP", + "sourceUrl": "https://www.playwire.com/faq" + }, + { + "metric": "pageviews", + "comparator": "typically apply at or above for full ROI", + "amount": 100000, + "unit": "pageviews", + "period": "month", + "scope": "website", + "program": "Playwire guidance", + "sourceUrl": "https://www.playwire.com/qualification-criteria", + "note": "Guidance, not stated admission minimum." + }, + { + "metric": "invalid traffic", + "comparator": "no higher than", + "amount": 7, + "unit": "percent", + "period": null, + "scope": "publisher traffic", + "program": "Playwire", + "sourceUrl": "https://www.playwire.com/faq" + }, + { + "metric": "US share", + "comparator": "higher revenue signal, not a gate", + "amount": 20, + "unit": "percent", + "period": null, + "scope": "publisher audience", + "program": "Playwire", + "sourceUrl": "https://www.playwire.com/qualification-criteria" + } + ], + "observations": [ + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/1wp5uz8/", + "publishedAt": "2026-10-21 (relative date)", + "site": "anonymous gaming site under consideration", + "niche": "gaming", + "traffic": { + "value": 1400000, + "metric": "pageviews/month; 110K MAU", + "period": "month" + }, + "adRevenueMonthlyUsd": null, + "countries": [ + "US over 50%" + ], + "decision": "approached by Playwire, NitroPay and Publift; no decision yet", + "limits": "Publift forecast $4K–$10K was unverified and questioned by the poster." + }, + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/1wp5uz8/", + "publishedAt": "2026-10-21 (relative date)", + "site": "anonymous Playwire publisher commenter", + "niche": "not stated", + "traffic": { + "value": 1000000, + "metric": "pageviews/month", + "period": "month" + }, + "adRevenueMonthlyUsd": null, + "countries": [ + "US about 10%" + ], + "decision": "reported using Playwire and a positive experience", + "limits": "Anonymous, no revenue or full application context." + }, + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/1wp5uz8/", + "publishedAt": "2026-10-21 (relative date)", + "site": "anonymous rejected publisher commenter", + "niche": "not stated", + "traffic": { + "value": 1000000, + "metric": "pageviews/month", + "period": "month" + }, + "adRevenueMonthlyUsd": null, + "countries": [ + "US about 25%" + ], + "decision": "reported rejection two days before posting", + "limits": "No content or IVT detail; not a geography rule." + }, + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/1sza527/venatus_vs_publisher_collective/", + "publishedAt": "2026-05 (approx.; Reddit displayed 5 months)", + "site": "anonymous HTML5 gaming publisher", + "niche": "HTML5 gaming", + "traffic": { + "value": null, + "metric": "pageviews/sessions not disclosed; 10 million ad impressions and 35 million ad requests", + "period": "best month; exact month not stated" + }, + "adRevenueMonthlyUsd": null, + "countries": [ + "Tier 1 about 50–60%; remainder Tier 2/3" + ], + "decision": "reported using Playwire for over a year and considering Publisher Collective or Venatus because of video fill and performance; no migration outcome reported", + "limits": "anonymous self-report; no pageviews, sessions, monthly revenue, or exact country list; not an application-acceptance example" + } + ], + "inference": { + "trafficRange": { + "low": 100000, + "high": 500000, + "metric": "pageviews", + "period": "month", + "basisSourceUrls": [ + "https://www.playwire.com/faq", + "https://www.playwire.com/qualification-criteria" + ], + "confidence": "medium" + }, + "revenueRange": null, + "practicalFit": "Near 500K PV with strong original content and acceptable IVT is a clear inquiry fit; around 100K may justify an application discussion but not a guaranteed approval.", + "currentNetworkSignals": [ + "May require replacing other programmatic tags.", + "Current provider is only comparison context." + ], + "geographyPreference": "20% US is associated with better average revenue; not a gate.", + "agePreference": "No age rule found.", + "confidence": "medium", + "rationale": "Two current official pages use different scale values for different purposes; anonymous reports show mixed results near 1M PV.", + "supportingSourceUrls": [ + "https://www.playwire.com/faq", + "https://www.playwire.com/qualification-criteria", + "https://www.reddit.com/r/adops/comments/1wp5uz8/", + "https://www.reddit.com/r/adops/comments/1sza527/venatus_vs_publisher_collective/" + ], + "gaps": [ + "Distinguish FAQ threshold from ROI guidance.", + "No public payout floor/method." + ] + }, + "sources": [ + { + "url": "https://www.playwire.com/faq", + "title": "Publisher FAQ", + "kind": "official help", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "500K PV / 1K DAU", + "IVT", + "SDK", + "tag compatibility" + ] + }, + { + "url": "https://www.playwire.com/qualification-criteria", + "title": "Qualification criteria", + "kind": "official guidance", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "100K ROI guidance", + "20% US revenue signal" + ] + }, + { + "url": "https://www.playwire.com/terms-of-service", + "title": "Terms of Service", + "kind": "official terms", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "publisher shares", + "Net 60" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/1wp5uz8/", + "title": "Gaming publisher approaches and mixed results", + "kind": "publisher firsthand", + "publishedAt": "2026-10-21", + "checkedAt": "2026-10-22", + "claims": [ + "site scale", + "vendor approach", + "mixed outcomes" + ] + }, + { + "url": "https://www.playwire.com/apply", + "title": "Apply Now page", + "kind": "official application", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "routes applicants to website/blog, mobile app, or desktop application" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/1sza527/venatus_vs_publisher_collective/", + "title": "Playwire publisher considering other gaming networks", + "kind": "publisher firsthand", + "publishedAt": "2026-05 (approx.)", + "checkedAt": "2026-10-22", + "claims": [ + "HTML5 gaming", + "50–60% Tier 1 share", + "10M impressions and 35M requests in best month", + "no alternative-network outcome" + ] + } + ] + }, + { + "slug": "pubfuture", + "checkedAt": "2026-10-23", + "productType": "Managed publisher monetization platform with H5 gaming emphasis", + "applicationUrl": "https://ssp.pubfuture.com/auth/signup", + "directoryPatch": { + "checkedAt": "2026-10-23", + "keyNumbers": [ + { + "label": "Traffic to join", + "value": "100,000", + "note": "monthly pageviews", + "sourceUrl": "https://pubfuture.com/home" + }, + { + "label": "Pay day", + "value": "Net 30", + "note": "January earnings are released at the end of February.", + "sourceUrl": "https://pubfuture.com/home" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "At least 100,000 pageviews a month", + "sourceUrl": "https://pubfuture.com/home" + }, + { + "label": "Content", + "value": "Safe content with no nudity", + "sourceUrl": "https://pubfuture.com/home" + }, + { + "label": "Must connect", + "value": "Add PubFuture lines to ads.txt; tags work inside Google Ad Manager and other ad servers", + "sourceUrl": "https://pubfuture.com/home" + }, + { + "label": "Application", + "value": "Create a publisher account and submit the website for review", + "sourceUrl": "https://ssp.pubfuture.com/auth/signup" + } + ], + "revenueShare": null, + "paymentTerms": "Net 30; January earnings released at the end of February", + "paymentThreshold": null, + "paymentMethods": [], + "sources": [ + { + "label": "Publisher FAQ (JavaScript-rendered)", + "url": "https://pubfuture.com/home" + }, + { + "label": "H5 game vendor case study", + "url": "https://blog.pubfuture.com/the-secret-to-400-more-revenue-for-h5-game-sites-pubfutures-winning-formula/1007/" + }, + { + "label": "Publisher contact form", + "url": "https://pubfuture.com/contact" + }, + { + "label": "Publisher onboarding and ads.txt article", + "url": "https://blog.pubfuture.com/ads-txt-and-ad-revenue-what-every-publisher-should-know/1236/" + }, + { + "label": "Publisher sign-up form", + "url": "https://ssp.pubfuture.com/auth/signup" + } + ] + }, + "fit": { + "publisherTypes": [ + "web publishers", + "H5 game publishers", + "interactive-content publishers" + ], + "nichesStrong": [ + "H5 games", + "gaming" + ], + "nichesWeak": [ + "general editorial blogs (limited fit evidence)" + ], + "geographies": [ + "No public country rule found" + ], + "role": "primary", + "entryPositioning": "Current publisher FAQ states a 100,000 monthly pageview minimum, safe content, and ads.txt requirements.", + "compatibilityNotes": [ + "Tags can work inside the publisher's ad server or Google Ad Manager; commercial compatibility with existing providers needs confirmation." + ] + }, + "officialRequirements": [ + { + "metric": "pageviews", + "comparator": "gte", + "amount": 100000, + "unit": "count", + "period": "month", + "scope": "website", + "program": "PubFuture", + "sourceUrl": "https://pubfuture.com/home", + "note": "Verified in the live JavaScript-rendered FAQ on 2026-10-23." + } + ], + "observations": [], + "inference": { + "trafficRange": { + "low": 100000, + "high": null, + "metric": "pageviews", + "period": "month", + "basisSourceUrls": [ + "https://pubfuture.com/home" + ], + "confidence": "high" + }, + "revenueRange": null, + "practicalFit": "Consider for H5 gaming at or above the 100,000 monthly pageview floor; content and site review still apply.", + "currentNetworkSignals": [ + "Ask about compatibility with existing game ad stack and current tags.", + "Other gaming-network membership is not acceptance proof." + ], + "geographyPreference": "Not public.", + "agePreference": "Not public.", + "confidence": "low", + "rationale": "The live FAQ establishes the traffic floor. H5 product emphasis and vendor cases support niche fit; independent acceptance reports remain sparse.", + "supportingSourceUrls": [ + "https://pubfuture.com/", + "https://blog.pubfuture.com/the-secret-to-400-more-revenue-for-h5-game-sites-pubfutures-winning-formula/1007/" + ], + "gaps": [ + "No public country percentage or base revenue share.", + "No independent success report with traffic and decision.", + "The older indexed $50 payout floor and payment methods were not reconfirmed in the live FAQ." + ] + }, + "sources": [ + { + "url": "https://pubfuture.com/home", + "title": "Publisher FAQ, opened in browser including questions5,8,9", + "kind": "official product/payment", + "publishedAt": null, + "checkedAt": "2026-10-23", + "claims": [ + "At least100,000 monthly pageviews; safe content/no nudity; ads.txt.", + "Tags can run inside Google Ad Manager and other ad servers.", + "Net30:January paid at endofFebruary.", + "Older indexed$50payout/methods not reconfirmed in liveFAQ." + ] + }, + { + "url": "https://blog.pubfuture.com/the-secret-to-400-more-revenue-for-h5-game-sites-pubfutures-winning-formula/1007/", + "title": "H5 game case", + "kind": "vendor case", + "publishedAt": "2025", + "checkedAt": "2026-10-16", + "claims": [ + "100K PV context, not a threshold" + ] + }, + { + "url": "https://pubfuture.com/contact", + "title": "Contact", + "kind": "official application", + "publishedAt": null, + "checkedAt": "2026-10-16", + "claims": [ + "publisher inquiry" + ] + }, + { + "url": "https://ssp.pubfuture.com/auth/signup", + "title": "Publisher sign-up form", + "kind": "official application", + "publishedAt": null, + "checkedAt": "2026-10-23", + "claims": [ + "create account and submit website for monetization review" + ] + } + ] + }, + { + "slug": "pubgalaxy", + "checkedAt": "2026-10-22", + "productType": "Retired standalone brand; publisher supply migrated to Improve Digital Yield or SSP", + "applicationUrl": null, + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [], + "joining": [ + { + "label": "Traffic", + "value": "No standalone PubGalaxy application; publisher supply migrated to Improve Digital", + "sourceUrl": "https://www.azerion.com/azerion-unifies-its-publisher-supply-business-under-improve-digital-launching-a-full-circle-solution-for-publishers/" + }, + { + "label": "Visitor location", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Content", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Google standing", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Must connect", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Approval time", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Application", + "value": "No current PubGalaxy route; Improve Digital has separate Yield and SSP request-access routes", + "sourceUrl": "https://improvedigital.com/" + } + ], + "revenueShare": null, + "paymentTerms": null, + "paymentThreshold": null, + "paymentMethods": [], + "sources": [ + { + "label": "Azerion announcement unifying publisher supply under Improve Digital", + "url": "https://www.azerion.com/azerion-unifies-its-publisher-supply-business-under-improve-digital-launching-a-full-circle-solution-for-publishers/" + }, + { + "label": "Current Improve Digital publisher offering", + "url": "https://improvedigital.com/" + }, + { + "label": "PubGalaxy official LinkedIn transition update", + "url": "https://gl.linkedin.com/company/pubgalaxy" + } + ] + }, + "fit": { + "publisherTypes": [ + "legacy PubGalaxy publishers", + "current Improve Digital prospects" + ], + "nichesStrong": [ + "web/app monetization for current replacement offer" + ], + "nichesWeak": [], + "geographies": [ + "Improve Digital request form asks country; no published threshold" + ], + "role": "infrastructure", + "entryPositioning": "Unavailable as a standalone option. Azerion announced the consolidation on Sep 23, 2026.", + "compatibilityNotes": [ + "Improve Digital Yield is managed and may replace current stack.", + "Improve Digital SSP is for publishers with their own stack and adds demand.", + "Do not carry legacy PubGalaxy payment terms to Improve Digital." + ] + }, + "officialRequirements": [ + { + "metric": "standalone applications", + "comparator": "unavailable after migration", + "amount": null, + "unit": "program status", + "period": "current", + "scope": "publisher offer", + "program": "PubGalaxy", + "sourceUrl": "https://www.azerion.com/azerion-unifies-its-publisher-supply-business-under-improve-digital-launching-a-full-circle-solution-for-publishers/" + } + ], + "observations": [], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Do not recommend PubGalaxy as an active option. Offer Improve Digital as a separate current alternative based on managed versus publisher-owned ad operations.", + "currentNetworkSignals": [ + "A legacy PubGalaxy account may have migrated but is not proof of current Improve Digital eligibility." + ], + "geographyPreference": "No current PubGalaxy preference.", + "agePreference": "No current rule.", + "confidence": "high", + "rationale": "Official Azerion release says publisher supply moved under Improve Digital and names the new Yield and SSP paths.", + "supportingSourceUrls": [ + "https://www.azerion.com/azerion-unifies-its-publisher-supply-business-under-improve-digital-launching-a-full-circle-solution-for-publishers/", + "https://improvedigital.com/" + ], + "gaps": [ + "No public Improve Digital traffic floor or payment terms.", + "Generic linked contact returned 404; access form appears on homepage." + ] + }, + "sources": [ + { + "url": "https://www.azerion.com/azerion-unifies-its-publisher-supply-business-under-improve-digital-launching-a-full-circle-solution-for-publishers/", + "title": "Publisher supply unification", + "kind": "official announcement", + "publishedAt": "2026-09-23", + "checkedAt": "2026-10-22", + "claims": [ + "PubGalaxy transition", + "Yield and SSP" + ] + }, + { + "url": "https://improvedigital.com/", + "title": "Improve Digital products/access", + "kind": "official product", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "managed Yield", + "SSP for own stack", + "request-access form" + ] + }, + { + "url": "https://www.pubgalaxy.com/publishers/", + "title": "Legacy publisher URL", + "kind": "official legacy redirect", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "redirects to Improve Digital" + ] + } + ] + }, + { + "slug": "publift", + "checkedAt": "2026-10-22", + "productType": "Managed publisher ad monetization and yield optimization", + "applicationUrl": "https://www.publift.com/lets-talk", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Revenue to join", + "value": "More than $2,000", + "note": "monthly ad revenue, in USD", + "sourceUrl": "https://www.publift.com/blog/publift-requirements" + }, + { + "label": "Revenue split", + "value": "80/20", + "note": "in Publift's 2026 comparison; confirm in your order", + "sourceUrl": "https://www.publift.com/blog/best-mediavine-alternatives" + }, + { + "label": "Payment minimum", + "value": "$200", + "sourceUrl": "https://www.publift.com/blog/the-best-cpm-ad-network-for-publishers" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "500,000 monthly pageviews is secondary; more than $2,000 monthly ad revenue is the main qualifying metric", + "note": "Monthly; revenue is the main qualifying metric.", + "sourceUrl": "https://www.publift.com/blog/publift-requirements" + }, + { + "label": "Visitor location", + "value": "Best fit: majority of traffic from the Americas, Europe, or Australia/New Zealand", + "note": "Publift says it works best with this mix; it does not state a strict geographic cutoff.", + "sourceUrl": "https://www.publift.com/how-it-works" + }, + { + "label": "Content", + "value": "Useful, original, appropriate, and brand-safe content", + "sourceUrl": "https://www.publift.com/blog/publift-requirements" + }, + { + "label": "Google standing", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Must connect", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Approval time", + "value": "Ad tags provided within five days", + "note": "The guide does not separate review time from the ad-tag delivery window.", + "sourceUrl": "https://www.publift.com/blog/the-best-cpm-ad-network-for-publishers" + }, + { + "label": "Ad revenue", + "value": "More than $2,000 a month", + "note": "Primary qualifying metric, in USD.", + "sourceUrl": "https://www.publift.com/blog/publift-requirements" + }, + { + "label": "Application", + "value": "The enquiry form asks for monthly revenue, monthly pageviews, and majority traffic location; these are intake fields, not approval guarantees.", + "sourceUrl": "https://www.publift.com/lets-talk" + } + ], + "revenueShare": "80/20 model according to Publift’s 2026 comparison; confirm in the order", + "paymentTerms": "Google revenue: Net 30; other ad-network revenue: Net 90", + "paymentThreshold": "$200 USD", + "paymentMethods": [ + "Direct bank transfer" + ], + "sources": [ + { + "label": "Publift requirements", + "url": "https://www.publift.com/blog/publift-requirements" + }, + { + "label": "How it works and publisher fit", + "url": "https://www.publift.com/how-it-works" + }, + { + "label": "2026 Mediavine alternatives comparison and revenue split", + "url": "https://www.publift.com/blog/best-mediavine-alternatives" + }, + { + "label": "2026 CPM network payment and tag timing comparison", + "url": "https://www.publift.com/blog/the-best-cpm-ad-network-for-publishers" + }, + { + "label": "2026 payment comparison", + "url": "https://www.publift.com/blog/ezoic-vs-adsense-vs-publift" + }, + { + "label": "Publisher enquiry form", + "url": "https://www.publift.com/lets-talk" + } + ] + }, + "fit": { + "publisherTypes": [ + "established web publishers", + "publishers with material ad revenue", + "sites seeking managed yield support" + ], + "nichesStrong": [ + "content publishing; no strict niche rule stated" + ], + "nichesWeak": [], + "geographies": [ + "Publift says traffic origin is not a strict discriminator" + ], + "role": "primary", + "entryPositioning": "Publift says >$2K monthly ad revenue is its main qualifying measure; 500K PV is secondary. Fast-growing smaller sites may contact the team.", + "compatibilityNotes": [ + "Managed service replaces primary display stack.", + "Confirm 80/20 and payout details in signed order.", + "Sales forecasts are not guaranteed RPMs." + ] + }, + "officialRequirements": [ + { + "metric": "monthly ad revenue", + "comparator": "more than", + "amount": 2000, + "unit": "USD", + "period": "month", + "scope": "publisher site", + "program": "Publift managed service", + "sourceUrl": "https://www.publift.com/blog/publift-requirements", + "note": "Primary qualifying metric; rapidly growing sites below may contact the team." + }, + { + "metric": "pageviews", + "comparator": "secondary indicator, not minimum", + "amount": 500000, + "unit": "pageviews", + "period": "month", + "scope": "publisher site", + "program": "Publift", + "sourceUrl": "https://www.publift.com/blog/publift-requirements" + } + ], + "observations": [ + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/1wp5uz8/", + "publishedAt": "2026-10-21 (relative date)", + "site": "anonymous gaming site", + "niche": "gaming", + "traffic": { + "value": 1400000, + "metric": "pageviews/month; 110K MAU", + "period": "month" + }, + "adRevenueMonthlyUsd": null, + "countries": [ + "US over 50%" + ], + "decision": "publisher said Publift forecast $4K–$10K net monthly potential; had not launched and questioned quote", + "limits": "Not realized revenue or general performance." + }, + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/1w7fix0/", + "publishedAt": "2026-09 (approx.)", + "site": "anonymous React PWA publisher", + "niche": "PWA", + "traffic": { + "value": null, + "metric": "not disclosed", + "period": null + }, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "one user stopped test after fullscreen ad issue; another said service worked well for years", + "limits": "Conflicting anecdotes without scale." + } + ], + "inference": { + "trafficRange": null, + "revenueRange": { + "minimum": 2000, + "currency": "USD", + "period": "monthly ad revenue", + "nature": "official primary fit criterion; no upper limit published" + }, + "practicalFit": "Prioritize for actual ad revenue above $2K/month; pageviews alone are secondary. Smaller fast-growing sites can ask for review.", + "currentNetworkSignals": [ + "Use actual existing ad revenue, not a vendor estimate.", + "Check migration from another managed stack." + ], + "geographyPreference": "Origin is not stated as strict; fit copy favors Americas, Europe, Australia/New Zealand.", + "agePreference": "No age minimum found.", + "confidence": "high", + "rationale": "Oct 2026 official requirements guide names monthly revenue as its main criterion and expressly welcomes fast-growing smaller publishers to contact them.", + "supportingSourceUrls": [ + "https://www.publift.com/blog/publift-requirements", + "https://www.publift.com/how-it-works" + ], + "gaps": [ + "No public geo share or Google standing condition.", + "No independent acceptance near $2K threshold.", + "Comparison-page payment terms should be checked against contract." + ] + }, + "sources": [ + { + "url": "https://www.publift.com/blog/publift-requirements", + "title": "Publift Requirements 2026", + "kind": "official requirements", + "publishedAt": "2026-10-08", + "checkedAt": "2026-10-22", + "claims": [ + ">$2K monthly revenue", + "500K PV secondary" + ] + }, + { + "url": "https://www.publift.com/how-it-works", + "title": "How it works", + "kind": "official product", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "managed monetization and geography guidance" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/1wp5uz8/", + "title": "Publisher inquiry and forecast", + "kind": "publisher firsthand", + "publishedAt": "2026-10-21", + "checkedAt": "2026-10-22", + "claims": [ + "1.4M PV", + "unverified forecast" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/1w7fix0/", + "title": "Publisher reviews", + "kind": "publisher firsthand", + "publishedAt": "2026-09", + "checkedAt": "2026-10-22", + "claims": [ + "mixed reports" + ] + }, + { + "url": "https://www.publift.com/lets-talk", + "title": "Publisher enquiry form", + "kind": "official application", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "monthly revenue, pageviews, and majority-traffic-location intake fields" + ] + } + ] + }, + { + "slug": "publir", + "checkedAt": "2026-10-22", + "productType": "Publisher monetization suite for programmatic ads, subscriptions, adblock recovery, crowdfunding, and commerce", + "applicationUrl": "https://publir.com/app/pricing", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Programmatic share", + "value": "85%", + "note": "publisher share; Publir retains 15%, before applicable service costs", + "sourceUrl": "https://publir.com/service_agreement" + }, + { + "label": "Custom ad share", + "value": "50/50", + "note": "publisher and Publir; Net 60", + "sourceUrl": "https://publir.com/service_agreement" + }, + { + "label": "Pro fee", + "value": "15%", + "note": "separate from custom ad sales", + "sourceUrl": "https://publir.com/app/pricing" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "Pricing lists no traffic limit, but general admission criteria are not fully disclosed", + "sourceUrl": "https://publir.com/app/pricing", + "note": "Not a guarantee of acceptance at any traffic level." + }, + { + "label": "Visitor location", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Content", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Google standing", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Must connect", + "value": "Install Publir's software and ad tags", + "sourceUrl": "https://publir.com/service_agreement" + }, + { + "label": "Approval time", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Exclusivity", + "value": "Non-exclusive service agreement", + "sourceUrl": "https://publir.com/service_agreement" + }, + { + "label": "Notice", + "value": "Either party may terminate with 30 days’ notice", + "sourceUrl": "https://publir.com/service_agreement" + } + ], + "revenueShare": "Programmatic and subscriptions: 85% to publisher before service costs; custom ads: 50/50; crowdfunding: Publir retains 15%", + "paymentTerms": "Programmatic and custom ads: at least monthly on Net 60; subscriptions: paid at least monthly", + "paymentThreshold": null, + "paymentMethods": [], + "sources": [ + { + "label": "Pricing", + "url": "https://publir.com/app/pricing" + }, + { + "label": "Service agreement", + "url": "https://publir.com/service_agreement" + } + ] + }, + "fit": { + "publisherTypes": [ + "digital publications", + "publishers adding subscription/crowdfunding tools", + "publishers seeking ad optimization" + ], + "nichesStrong": [ + "publisher content; no niche focus published" + ], + "nichesWeak": [], + "geographies": [ + "No geography rule found" + ], + "role": "infrastructure", + "entryPositioning": "Pricing lists no traffic limit for a product tier, but no complete admission checklist is public.", + "compatibilityNotes": [ + "Programmatic agreement says Publir serves 100% of ads in that service.", + "Subscriptions, adblock recovery, crowdfunding, and commerce may be additive.", + "Agreement last updated in 2024; reconfirm current terms." + ] + }, + "officialRequirements": [ + { + "metric": "traffic limit", + "comparator": "none listed on pricing page; admission criteria not fully disclosed", + "amount": null, + "unit": "traffic", + "period": null, + "scope": "pricing/product access", + "program": "Publir", + "sourceUrl": "https://publir.com/app/pricing" + } + ], + "observations": [], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Fit depends on the module needed. Stronger option when a publisher wants subscriptions, crowdfunding, adblock recovery, or programmatic support; not enough evidence to recommend on traffic scale alone.", + "currentNetworkSignals": [ + "Identify whether the user needs a full programmatic replacement or a specific add-on.", + "Check fees for ad serving/infrastructure as well as the share." + ], + "geographyPreference": "No public rule.", + "agePreference": "No public rule.", + "confidence": "low", + "rationale": "Official pricing and contract detail product economics but no numeric admissions or independent entry examples.", + "supportingSourceUrls": [ + "https://publir.com/app/pricing", + "https://publir.com/service_agreement" + ], + "gaps": [ + "No public payment floor or methods.", + "No independent publisher report with site scale and application decision.", + "Public service agreement is dated Oct 2024." + ] + }, + "sources": [ + { + "url": "https://publir.com/app/pricing", + "title": "Pricing and product plans", + "kind": "official product", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "no traffic limit language", + "Pro fee" + ] + }, + { + "url": "https://publir.com/service_agreement", + "title": "Service Agreement", + "kind": "official terms", + "publishedAt": "2024-10-15", + "checkedAt": "2026-10-22", + "claims": [ + "programmatic share and Net 60", + "custom ad split", + "possible fees" + ] + } + ] + }, + { + "slug": "publisher-collective", + "checkedAt": "2026-10-22", + "productType": "Managed publisher monetization and ad-sales collective combined with Snigel technology", + "applicationUrl": "https://www.publisher-collective.com/publisher-contact", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Revenue signal", + "value": "About €300", + "note": "EUR daily review signal; not a hard joining cutoff", + "sourceUrl": "https://www.publisher-collective.com/faq" + }, + { + "label": "Payment minimum", + "value": "€500", + "sourceUrl": "https://www.publisher-collective.com/partners-terms-conditions" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "Core niches are reviewed individually; other niches need 3,000,000 monthly pageviews", + "note": "Tech, gaming, education, sports and health are core. Hobby coverage needs confirmation. EUR 300 daily revenue is a flexible review signal.", + "sourceUrl": "https://www.publisher-collective.com/faq" + }, + { + "label": "Visitor location", + "value": "Works with publishers globally", + "sourceUrl": "https://www.publisher-collective.com/faq" + }, + { + "label": "Content", + "value": "Unique, high-quality content and reputable traffic", + "note": "No bots or fraudulent traffic; partner terms also prohibit specified content", + "sourceUrl": "https://www.publisher-collective.com/faq" + }, + { + "label": "Google standing", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Must connect", + "value": "Add Publisher Collective JavaScript tags to the site", + "sourceUrl": "https://www.publisher-collective.com/faq" + }, + { + "label": "Approval time", + "value": "Application decision time not public; setup takes 10–14 days, full ramp target up to 30 days", + "note": "The FAQ gives 10 to 14 days for onboarding setup, not application approval", + "sourceUrl": "https://www.publisher-collective.com/faq" + }, + { + "label": "Niches", + "value": "Technology, video gaming, hobbies and casual games, knowledge and education, sports, health and wellbeing", + "sourceUrl": "https://www.publisher-collective.com/faq" + }, + { + "label": "Ad revenue", + "value": "About €300/day is a flexible evaluation signal; lower sites may be considered for growth or quality", + "sourceUrl": "https://www.publisher-collective.com/faq" + }, + { + "label": "Application", + "value": "Site owners can submit a publisher partner enquiry; review is sales-led.", + "sourceUrl": "https://www.publisher-collective.com/publisher-contact" + } + ], + "revenueShare": "Set individually in the Advertising Representation Agreement", + "paymentTerms": "Paid after the advertiser pays; the partner terms set no fixed interval", + "paymentThreshold": "€500", + "paymentMethods": [ + "Bank transfer; GBP, EUR, or USD" + ], + "sources": [ + { + "label": "Publisher FAQ and current eligibility", + "url": "https://www.publisher-collective.com/faq" + }, + { + "label": "Partner terms", + "url": "https://www.publisher-collective.com/partners-terms-conditions" + }, + { + "label": "Publisher contact form", + "url": "https://www.publisher-collective.com/publisher-contact" + } + ], + "joinSummary": "Core genres are reviewed individually; other niches need 3 million pageviews a month" + }, + "fit": { + "publisherTypes": [ + "independent/specialist publishers", + "gaming, tech, education, sports, health and hobby sites" + ], + "nichesStrong": [ + "technology", + "gaming", + "hobbies/casual games", + "education", + "sports", + "health and wellbeing" + ], + "nichesWeak": [ + "non-core genres generally need larger scale" + ], + "geographies": [ + "Serves publishers globally" + ], + "role": "sales_collective", + "entryPositioning": "Selective hands-on partner. Core genres are reviewed individually; other niches have a 3M monthly PV rule. €300/day is flexible, not a hard minimum.", + "compatibilityNotes": [ + "Hybrid client/server header bidding and direct advertising are available.", + "May replace a current managed stack; confirm contract and demand scope.", + "Prior Snigel/PC experience is only a soft signal." + ] + }, + "officialRequirements": [ + { + "metric": "pageviews", + "comparator": "at least for publishers outside core genres", + "amount": 3000000, + "unit": "pageviews", + "period": "month", + "scope": "publisher site", + "program": "Publisher Collective", + "sourceUrl": "https://www.publisher-collective.com/faq" + }, + { + "metric": "monthly ad revenue", + "comparator": "approximately; lower sites may be considered for growth/quality", + "amount": 300, + "unit": "EUR per day", + "period": "day", + "scope": "publisher site", + "program": "Publisher Collective", + "sourceUrl": "https://www.publisher-collective.com/faq", + "note": "Flexible review signal." + } + ], + "observations": [ + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/1mpgmnn/", + "publishedAt": "2025-10 (approx.)", + "site": "anonymous gaming owner", + "niche": "gaming", + "traffic": { + "value": 90000, + "metric": "pageviews/day", + "period": "daily" + }, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "considering PC with NitroPay/Playwire; no application outcome", + "limits": "Question only." + }, + { + "sourceUrl": "https://www.trustpilot.com/review/www.publisher-collective.com", + "publishedAt": "2026-04-03", + "site": "reviewer says prior Snigel publisher", + "niche": "not stated", + "traffic": { + "value": null, + "metric": "not disclosed", + "period": null + }, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "reviewer alleged payment issues after merger", + "limits": "Single, unverified complaint with no metrics." + }, + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/1sza527/venatus_vs_publisher_collective/", + "publishedAt": "2026-05 (approx.; Reddit displayed 5 months)", + "site": "anonymous HTML5 gaming publisher", + "niche": "HTML5 gaming", + "traffic": { + "value": null, + "metric": "pageviews/sessions not disclosed; 10 million ad impressions and 35 million ad requests", + "period": "best month; exact month not stated" + }, + "adRevenueMonthlyUsd": null, + "countries": [ + "Tier 1 about 50–60%; remainder Tier 2/3" + ], + "decision": "considered Publisher Collective and Venatus as alternatives while still using Playwire; no application outcome reported", + "limits": "anonymous self-report; figures describe the publisher’s Playwire site, not a Publisher Collective client; no pageviews, sessions, or revenue" + } + ], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Prioritize for publishers in the named core niches with meaningful monetization opportunity; for other genres, apply the stated 3M PV floor. Growth/quality can justify asking below €300/day.", + "currentNetworkSignals": [ + "Current provider is comparator only, not acceptance proof.", + "Check whether prior Snigel/PC contracts migrated." + ], + "geographyPreference": "Global service; no country-share gate published.", + "agePreference": "No domain-age minimum found.", + "confidence": "high", + "rationale": "Official FAQ gives specific core genres, a separate rule for other niches, and a flexible revenue review signal.", + "supportingSourceUrls": [ + "https://www.publisher-collective.com/faq", + "https://www.publisher-collective.com/partners-terms-conditions", + "https://www.reddit.com/r/adops/comments/1sza527/venatus_vs_publisher_collective/" + ], + "gaps": [ + "No acceptance rate or core-niche traffic floor.", + "Current share is negotiated.", + "Recent negative Trustpilot reports are unverified." + ] + }, + "sources": [ + { + "url": "https://www.publisher-collective.com/faq", + "title": "Current Publisher Collective FAQ", + "kind": "official program", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "company structure", + "core niches", + "3M outside core", + "flexible revenue evaluation" + ] + }, + { + "url": "https://www.publisher-collective.com/partners-terms-conditions", + "title": "Partner terms", + "kind": "official contract", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "payment threshold/terms" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/1mpgmnn/", + "title": "Gaming publisher discussion", + "kind": "publisher discussion", + "publishedAt": "2025-10", + "checkedAt": "2026-10-22", + "claims": [ + "traffic context, no decision" + ] + }, + { + "url": "https://www.trustpilot.com/review/www.publisher-collective.com", + "title": "Customer reviews", + "kind": "publisher-submitted", + "publishedAt": "2026-04", + "checkedAt": "2026-10-22", + "claims": [ + "unverified complaints" + ] + }, + { + "url": "https://www.publisher-collective.com/publisher-contact", + "title": "Publisher contact form", + "kind": "official application", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "site-owner partner enquiry route" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/1sza527/venatus_vs_publisher_collective/", + "title": "Gaming publisher comparing Publisher Collective and Venatus", + "kind": "publisher firsthand", + "publishedAt": "2026-05 (approx.)", + "checkedAt": "2026-10-22", + "claims": [ + "Playwire customer considering alternatives", + "traffic and ad-request context", + "no Publisher Collective application outcome" + ] + } + ] + }, + { + "slug": "pubnation", + "checkedAt": "2026-10-22", + "productType": "Discontinued standalone offer; sites migrated to Mediavine", + "applicationUrl": null, + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [], + "joining": [ + { + "label": "Traffic", + "value": "No current standalone PubNation offer; migration to Mediavine is complete", + "sourceUrl": "https://help.mediavine.com/" + }, + { + "label": "Visitor location", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Content", + "value": "Mentions gaming, sports, tech, entertainment, and other genres", + "sourceUrl": "https://www.pubnation.com/" + }, + { + "label": "Google standing", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Must connect", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Approval time", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Application", + "value": "Discontinued; use a current Mediavine route if eligible", + "sourceUrl": "https://help.mediavine.com/" + } + ], + "revenueShare": null, + "paymentTerms": null, + "paymentThreshold": null, + "paymentMethods": [], + "sources": [ + { + "label": "Official publisher homepage", + "url": "https://www.pubnation.com/" + }, + { + "label": "Mediavine migration status", + "url": "https://help.mediavine.com/" + } + ] + }, + "fit": { + "publisherTypes": [ + "historical PubNation accounts" + ], + "nichesStrong": [ + "historically gaming, sports, tech and entertainment" + ], + "nichesWeak": [], + "geographies": [ + "No current PubNation rules" + ], + "role": "primary", + "entryPositioning": "Not available as a separate application. Current Mediavine Help Center says migration is complete.", + "compatibilityNotes": [ + "Historical PubNation acceptance does not prove present Mediavine eligibility.", + "Ask which active Mediavine program account uses." + ] + }, + "officialRequirements": [ + { + "metric": "standalone publisher applications", + "comparator": "unavailable; migration completed", + "amount": null, + "unit": "program status", + "period": "current", + "scope": "publisher offer", + "program": "PubNation", + "sourceUrl": "https://help.mediavine.com/" + } + ], + "observations": [ + { + "sourceUrl": "https://www.reddit.com/r/Blogging/comments/1s0ly5b/", + "publishedAt": "2026-03 (approx.; Reddit displayed 7 months)", + "site": "anonymous gaming blog; owner reported nearly 9 years old", + "niche": "gaming", + "traffic": { + "value": "30000–40000", + "metric": "sessions/month", + "period": "month" + }, + "adRevenueMonthlyUsd": 621, + "countries": [ + "Mostly Google; country mix not stated" + ], + "decision": "reported accepted to PubNation; about $621 last month and $614 month-to-date in current month", + "limits": "Historical program; sessions are not pageviews and current-month revenue is incomplete." + } + ], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Do not shortlist as current. Keep historical gaming acceptance for context only, not as present Mediavine eligibility evidence.", + "currentNetworkSignals": [ + "If user reports PubNation, verify migration and current Mediavine program." + ], + "geographyPreference": "No current preference.", + "agePreference": "No current age rule.", + "confidence": "high", + "rationale": "Official Mediavine help says PubNation migration is complete and the offer is no longer available.", + "supportingSourceUrls": [ + "https://help.mediavine.com/", + "https://www.pubnation.com/" + ], + "gaps": [ + "Migration timing/contract details per publisher not public.", + "Historical anecdote is anonymous." + ] + }, + "sources": [ + { + "url": "https://help.mediavine.com/", + "title": "Mediavine Help Center", + "kind": "official support", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "migration completed; offer unavailable" + ] + }, + { + "url": "https://www.pubnation.com/", + "title": "Legacy PubNation homepage", + "kind": "official legacy page", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "legacy marketing does not override current support status" + ] + }, + { + "url": "https://www.reddit.com/r/Blogging/comments/1s0ly5b/", + "title": "PubNation historical acceptance report", + "kind": "publisher firsthand", + "publishedAt": "2026-03 (approx.)", + "checkedAt": "2026-10-22", + "claims": [ + "site age", + "gaming", + "sessions", + "earnings" + ] + } + ] + }, + { + "slug": "pubpower", + "checkedAt": "2026-10-23", + "productType": "Managed publisher monetization and custom-bidder infrastructure", + "applicationUrl": "https://apps.pubpower.io/register", + "directoryPatch": { + "checkedAt": "2026-10-23", + "keyNumbers": [ + { + "label": "Dated traffic figure", + "value": "100,000", + "note": "approximate and dated; not a confirmed joining cutoff", + "sourceUrl": "https://help.pubpower.io/article/website-requirements" + }, + { + "label": "Pay day", + "value": "Net 0 or Net 30", + "note": "Net 0 above $3,000 a month in revenue", + "sourceUrl": "https://help.pubpower.io/article/payment-methods-terms" + }, + { + "label": "Payoneer minimum", + "value": "$50", + "sourceUrl": "https://help.pubpower.io/article/payment-methods-terms" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "Around 100,000 monthly visitors in an old help page; current threshold needs reconfirmation", + "note": "Page last updated about three years ago; not a confirmed current strict floor.", + "sourceUrl": "https://help.pubpower.io/article/website-requirements" + }, + { + "label": "Visitor location", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Content", + "value": "Follow PubPower’s content policy; no pop-ups or redirects", + "note": "Policy bars or restricts sexual, explicit, violent, illegal, gambling, and infringing content.", + "sourceUrl": "https://help.pubpower.io/article/website-requirements" + }, + { + "label": "Google standing", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Must connect", + "value": "Add PubPower ads.txt lines and install its ad tag", + "sourceUrl": "https://help.pubpower.io/article/quick-start-to-your-monetization" + }, + { + "label": "Approval time", + "value": "Usually 24–48 hours to 2–4 days", + "note": "Quick-start says 24–48 hours; FAQ says 2–4 days and warns weekends can take longer.", + "sourceUrl": "https://help.pubpower.io/article/quick-start-to-your-monetization" + }, + { + "label": "Application", + "value": "Create a PubPower publisher account, add the domain, then wait for the publisher QA review.", + "sourceUrl": "https://help.pubpower.io/article/quick-start-to-your-monetization" + } + ], + "revenueShare": "Essential publisher revenue share is tailored; Advanced custom bidders have no revenue share", + "paymentTerms": "Net 0 above $3,000 monthly revenue; otherwise Net 30", + "paymentThreshold": "Bank: $1,000; PayPal: $100; Payoneer: $50; crypto: BCH $100, BTC $1,000, USDT-ERC20 $1,000", + "paymentMethods": [ + "Bank transfer", + "PayPal", + "Payoneer", + "Cryptocurrency (BCH, BTC, USDT-ERC20)" + ], + "sources": [ + { + "label": "PubPower publisher packages and revenue-sharing model", + "url": "https://pubpower.io/" + }, + { + "label": "Website requirements", + "url": "https://help.pubpower.io/article/website-requirements" + }, + { + "label": "Content policies", + "url": "https://help.pubpower.io/article/content-policies" + }, + { + "label": "Quick-start and domain review", + "url": "https://help.pubpower.io/article/quick-start-to-your-monetization" + }, + { + "label": "Publisher FAQ and review timing", + "url": "https://help.pubpower.io/article/getting-started-faqs" + }, + { + "label": "Payment methods and terms", + "url": "https://help.pubpower.io/article/payment-methods-terms" + }, + { + "label": "Publisher account registration", + "url": "https://apps.pubpower.io/register" + } + ] + }, + "fit": { + "publisherTypes": [ + "small/mid-size publishers", + "anime and gaming sites", + "publishers seeking managed stack or custom bidders" + ], + "nichesStrong": [ + "anime and entertainment", + "gaming (limited evidence)" + ], + "nichesWeak": [], + "geographies": [ + "No country preference found" + ], + "role": "primary", + "entryPositioning": "Dated official guidance says around 100K monthly visitors. Treat as low-confidence conversation cue, not current cutoff.", + "compatibilityNotes": [ + "Managed service may replace display stack.", + "Advanced custom bidders can layer on a publisher-owned setup.", + "Some first-hand report says AdSense ran alongside; confirm package." + ] + }, + "officialRequirements": [ + { + "metric": "visitors", + "comparator": "around; dated help guidance", + "amount": 100000, + "unit": "visitors", + "period": "month", + "scope": "publisher site", + "program": "PubPower", + "sourceUrl": "https://help.pubpower.io/article/website-requirements", + "note": "Page update was about three years before check; not confirmed as current strict cutoff." + } + ], + "observations": [ + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/1dpv6e3/", + "publishedAt": "2024-06 (approx.)", + "site": "anonymous anime website", + "niche": "anime", + "traffic": { + "value": 100000, + "metric": "“traffic” (metric unclear)", + "period": "not stated" + }, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "seven-month-old site reported using AdSense and PubPower; PubPower CPM below AdSense", + "limits": "Traffic metric undefined; no approval/revenue total." + } + ], + "inference": { + "trafficRange": { + "low": 100000, + "high": null, + "metric": "visitors", + "period": "month", + "basisSourceUrls": [ + "https://help.pubpower.io/article/website-requirements" + ], + "confidence": "low" + }, + "revenueRange": null, + "practicalFit": "Potentially worth exploring near old ~100K visitor guidance, especially for managed monetization or bidder tools; stale help material means eligibility remains uncertain.", + "currentNetworkSignals": [ + "AdSense may coexist in some setup, based on one report; confirm contract.", + "Distinguish managed service from bidder-only platform." + ], + "geographyPreference": "No public preference.", + "agePreference": "No official age minimum; one seven-month-old site was reported but outcome unclear.", + "confidence": "low", + "rationale": "Official site requirement is old; the lone independent report uses ambiguous traffic and no final result.", + "supportingSourceUrls": [ + "https://help.pubpower.io/article/website-requirements", + "https://help.pubpower.io/article/payment-methods-terms", + "https://www.reddit.com/r/adops/comments/1dpv6e3/", + "https://pubpower.io/" + ], + "gaps": [ + "Reconfirm traffic rule.", + "No geography profile or unambiguous acceptance report.", + "Payment article is about two years old." + ] + }, + "sources": [ + { + "url": "https://help.pubpower.io/article/website-requirements", + "title": "Website requirements", + "kind": "official help", + "publishedAt": "2023 approx.", + "checkedAt": "2026-10-22", + "claims": [ + "around 100K visitors", + "site quality" + ] + }, + { + "url": "https://help.pubpower.io/article/payment-methods-terms", + "title": "Payment methods and terms", + "kind": "official help", + "publishedAt": "2024 approx.", + "checkedAt": "2026-10-22", + "claims": [ + "method thresholds", + "Net 0 / Net 30" + ] + }, + { + "url": "https://help.pubpower.io/article/quick-start-to-your-monetization", + "title": "Quick-start", + "kind": "official help", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "tag setup and timing" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/1dpv6e3/", + "title": "Anime publisher question", + "kind": "publisher firsthand", + "publishedAt": "2024-06 approx.", + "checkedAt": "2026-10-22", + "claims": [ + "seven-month age", + "ambiguous 100K traffic", + "AdSense coexistence" + ] + }, + { + "url": "https://apps.pubpower.io/register", + "title": "PubPower publisher account registration", + "kind": "official application", + "publishedAt": null, + "checkedAt": "2026-10-23", + "claims": [ + "publisher account registration route" + ] + }, + { + "url": "https://pubpower.io/", + "title": "Publisher packages and revenue-share options (official indexed page excerpt)", + "kind": "official product", + "publishedAt": null, + "checkedAt": "2026-10-23", + "claims": [ + "Essential plan share is tailored; the rate is not published", + "Advanced custom-bidder package advertises no revenue share", + "direct page could not be opened in this check" + ] + } + ] + }, + { + "slug": "raptive", + "checkedAt": "2026-10-23", + "productType": "Managed display advertising and publisher growth platform", + "applicationUrl": "https://dashboard.raptive.com/", + "directoryPatch": { + "checkedAt": "2026-10-23", + "keyNumbers": [ + { + "label": "Traffic to join", + "value": "25,000", + "note": "monthly pageviews", + "sourceUrl": "https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive" + }, + { + "label": "Your share", + "value": "75%", + "sourceUrl": "https://help.raptive.com/hc/en-us/articles/360035078152-Getting-Started-with-Raptive" + }, + { + "label": "Pay day", + "value": "Net 45", + "sourceUrl": "https://help.raptive.com/hc/en-us/articles/202052255-When-do-I-get-paid" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "At least 25,000 monthly pageviews; 50% named-country share below 100K PV and 40% at/above 100K", + "note": "Monthly", + "sourceUrl": "https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive" + }, + { + "label": "Visitor location", + "value": "50% from five countries at 25k–99,999 pageviews; 40% at 100k+", + "note": "US, UK, Canada, New Zealand, or Australia", + "sourceUrl": "https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive" + }, + { + "label": "Content", + "value": "High-quality, original, human-led content", + "note": "Long-form content on most pages at 25k–99,999 pageviews", + "sourceUrl": "https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive" + }, + { + "label": "Google standing", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Must connect", + "value": "Google Analytics access", + "note": "Read-only authorization", + "sourceUrl": "https://help.raptive.com/hc/en-us/articles/6681661647515-Applying-to-Raptive-with-Google-Analytics" + }, + { + "label": "Approval time", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Domain age", + "value": "At least six months", + "sourceUrl": "https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive" + }, + { + "label": "Application", + "value": "Apply in the Raptive dashboard after confirming traffic, country share, domain age, and Google Analytics criteria.", + "sourceUrl": "https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive" + } + ], + "revenueShare": "75%", + "paymentTerms": "Net 45; paid on the 15th", + "paymentThreshold": "$25 for most methods; $100 for wire transfer", + "paymentMethods": [ + "US direct deposit", + "eCheck or local bank transfer", + "PayPal", + "Paper check", + "Wire transfer" + ], + "sources": [ + { + "label": "Creator eligibility", + "url": "https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive" + }, + { + "label": "Applying with Google Analytics", + "url": "https://help.raptive.com/hc/en-us/articles/6681661647515-Applying-to-Raptive-with-Google-Analytics" + }, + { + "label": "Getting started and share", + "url": "https://help.raptive.com/hc/en-us/articles/360035078152-Getting-Started-with-Raptive" + }, + { + "label": "Payment timing", + "url": "https://help.raptive.com/hc/en-us/articles/202052255-When-do-I-get-paid" + }, + { + "label": "Payment methods", + "url": "https://help.raptive.com/hc/en-us/articles/360013465192-Payment-Methods" + }, + { + "label": "Payment thresholds", + "url": "https://help.raptive.com/hc/en-us/articles/360025379831-Why-didn-t-I-get-my-Raptive-payment" + }, + { + "label": "Raptive publisher dashboard application route (direct preview is session-gated)", + "url": "https://dashboard.raptive.com/" + } + ] + }, + "fit": { + "publisherTypes": [ + "content publishers and creators", + "recipe/lifestyle/editorial sites", + "original-content websites" + ], + "nichesStrong": [ + "food/recipes", + "lifestyle", + "editorial", + "gaming where content and geo qualify" + ], + "nichesWeak": [ + "thin/copycat/fully AI-generated content" + ], + "geographies": [ + "US/UK/CA/NZ/AU share: 50% at 25K–99,999 PV; 40% at 100K+" + ], + "role": "primary", + "entryPositioning": "Official floor at 25K PV/month, with country bands and a six-month domain age. No ad-revenue minimum published.", + "compatibilityNotes": [ + "Primary managed display stack.", + "Named five-country rule is not equivalent to all Tier 1 share.", + "Current network is a benchmark, not proof of acceptance." + ] + }, + "officialRequirements": [ + { + "metric": "pageviews", + "comparator": "at least", + "amount": 25000, + "unit": "pageviews", + "period": "month", + "scope": "publisher site", + "program": "Raptive", + "sourceUrl": "https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive" + }, + { + "metric": "traffic share in US/UK/CA/NZ/AU", + "comparator": "at least below 100K pageviews", + "amount": 50, + "unit": "percent", + "period": null, + "scope": "publisher audience", + "program": "Raptive", + "sourceUrl": "https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive" + }, + { + "metric": "traffic share in US/UK/CA/NZ/AU", + "comparator": "at least at 100K+ pageviews", + "amount": 40, + "unit": "percent", + "period": null, + "scope": "publisher audience", + "program": "Raptive", + "sourceUrl": "https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive" + }, + { + "metric": "domain age", + "comparator": "at least", + "amount": 6, + "unit": "months", + "period": "domain age", + "scope": "publisher site", + "program": "Raptive", + "sourceUrl": "https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive" + } + ], + "observations": [ + { + "sourceUrl": "https://www.reddit.com/r/Blogging/comments/1x8brun/", + "publishedAt": "2026-10-17 (approx.; Reddit showed 5 days)", + "site": "anonymous commenter site", + "niche": "gaming", + "traffic": { + "value": 25000, + "metric": "views (analytics metric unclear)", + "period": "at acceptance" + }, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "commenter said Raptive accepted six months after launch; reported 80% Google traffic", + "limits": "Country share and revenue absent; original poster was a separate recipe site with 9K–12K sessions/day." + } + ], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Strong fit at 25K monthly pageviews if domain age, named-country share, content, analytics, and implementation checks pass.", + "currentNetworkSignals": [ + "Compare current revenue and UX goals, but do not infer approval from another network." + ], + "geographyPreference": "At least 50% named-country share below 100K PV, then at least 40%.", + "agePreference": "Domain at least six months old.", + "confidence": "high", + "rationale": "Current official eligibility guide supplies exact traffic, geography, age, content, and analytics rules.", + "supportingSourceUrls": [ + "https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive", + "https://help.raptive.com/hc/en-us/articles/202052255-When-do-I-get-paid", + "https://help.raptive.com/hc/en-us/articles/360035078152-Getting-Started-with-Raptive" + ], + "gaps": [ + "No official revenue minimum or approval time.", + "One anonymous 25K acceptance report lacks country-share detail." + ] + }, + "sources": [ + { + "url": "https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive", + "title": "Who is eligible for Raptive?", + "kind": "official eligibility", + "publishedAt": "2026-09-26", + "checkedAt": "2026-10-22", + "claims": [ + "25K PV", + "country bands", + "six-month domain", + "quality/analytics" + ] + }, + { + "url": "https://help.raptive.com/hc/en-us/articles/202052255-When-do-I-get-paid", + "title": "Payment timing", + "kind": "official help", + "publishedAt": "2023-11-08", + "checkedAt": "2026-10-22", + "claims": [ + "Net 45", + "payout floor" + ] + }, + { + "url": "https://www.reddit.com/r/Blogging/comments/1x8brun/", + "title": "Raptive acceptance anecdote", + "kind": "publisher firsthand", + "publishedAt": "2026-10-17 approx.", + "checkedAt": "2026-10-22", + "claims": [ + "25K views", + "six-month domain" + ] + }, + { + "url": "https://help.raptive.com/hc/en-us/articles/360035078152-Getting-Started-with-Raptive", + "title": "Getting Started with Raptive", + "kind": "official help", + "publishedAt": "2026-08-24", + "checkedAt": "2026-10-23", + "claims": [ + "75% publisher share", + "Net 45 payments", + "managed ad-service details" + ] + }, + { + "url": "https://dashboard.raptive.com/", + "title": "Raptive Dashboard (application destination; session-gated preview)", + "kind": "official application", + "publishedAt": null, + "checkedAt": "2026-10-23", + "claims": [ + "official application destination linked from Raptive guidance", + "direct preview returned a browser-session verification screen; application requirements are sourced from the eligibility article" + ] + } + ] + }, + { + "slug": "refinery89", + "checkedAt": "2026-10-23", + "productType": "Managed web/app monetization using a publisher single tag or SDK", + "applicationUrl": "https://refinery89.com/get-started/", + "directoryPatch": { + "checkedAt": "2026-10-23", + "keyNumbers": [ + { + "label": "Payment minimum", + "value": "€250 or $250", + "note": "a month, by region", + "sourceUrl": "https://refinery89.com/docs/faqs/finance/is-there-a-minimum-threshold-for-getting-paid/" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "No numeric traffic minimum published; contact team for site review", + "sourceUrl": "https://refinery89.com/docs/faqs/requirements/am-i-eligible/" + }, + { + "label": "Visitor location", + "value": "Worldwide service availability; no qualifying country share published", + "sourceUrl": "https://refinery89.com/docs/faqs/about-refinery89/where-does-refinery89-operate-and-offer-its-services/" + }, + { + "label": "Content", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Google standing", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Must connect", + "value": "Single Tag for websites or SDK for apps", + "sourceUrl": "https://refinery89.com/docs/faqs/onboarding/how-can-i-start-working-with-refinery89/" + }, + { + "label": "Approval time", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Application", + "value": "Get Started form accepts a site or app and asks for a pageview band and country; no admission cutoff is published.", + "sourceUrl": "https://refinery89.com/get-started/" + } + ], + "revenueShare": null, + "paymentTerms": "Ask your Publisher Success Manager; no standard schedule is published", + "paymentThreshold": "€250 or $250, based on region", + "paymentMethods": [ + "Bank transfer", + "eCheck", + "Wire transfer", + "PayPal" + ], + "sources": [ + { + "label": "Eligibility", + "url": "https://refinery89.com/docs/faqs/requirements/am-i-eligible/" + }, + { + "label": "Publisher service locations", + "url": "https://refinery89.com/docs/faqs/about-refinery89/where-does-refinery89-operate-and-offer-its-services/" + }, + { + "label": "How to start and connect", + "url": "https://refinery89.com/docs/faqs/onboarding/how-can-i-start-working-with-refinery89/" + }, + { + "label": "Payment threshold", + "url": "https://refinery89.com/docs/faqs/finance/is-there-a-minimum-threshold-for-getting-paid/" + }, + { + "label": "Payment timing", + "url": "https://refinery89.com/docs/faqs/finance/when-do-publishers-get-paid/" + }, + { + "label": "Payment methods", + "url": "https://refinery89.com/docs/faqs/finance/what-are-the-payment-methods-available/" + }, + { + "label": "Publisher and app Get Started form", + "url": "https://refinery89.com/get-started/" + } + ] + }, + "fit": { + "publisherTypes": [ + "web publishers", + "app publishers", + "publishers seeking managed single-tag monetization" + ], + "nichesStrong": [ + "local news", + "lifestyle", + "publisher portfolios" + ], + "nichesWeak": [], + "geographies": [ + "Worldwide service; no preferred country mix" + ], + "role": "primary", + "entryPositioning": "Contact-based manual review with no public traffic or revenue minimum. €250/$250 is a payout floor, not an entry rule.", + "compatibilityNotes": [ + "Managed web service may replace current display stack.", + "App SDK is a separate path.", + "Confirm payment timing and share in contract." + ] + }, + "officialRequirements": [ + { + "metric": "traffic/revenue", + "comparator": "no numeric minimum published; discuss site with team", + "amount": null, + "unit": "not stated", + "period": null, + "scope": "publisher site or app", + "program": "Refinery89", + "sourceUrl": "https://refinery89.com/docs/faqs/requirements/am-i-eligible/" + }, + { + "metric": "application pageview and country fields", + "comparator": "collected as intake data, not published eligibility cutoffs", + "amount": null, + "unit": "pageview band and country", + "period": "application form", + "scope": "publisher site or app", + "program": "Refinery89", + "sourceUrl": "https://refinery89.com/get-started/" + } + ], + "observations": [ + { + "sourceUrl": "https://www.trustpilot.com/review/refinery89.com", + "publishedAt": "2025-2026 (review and company response)", + "site": "anonymous applicant", + "niche": "not stated", + "traffic": { + "value": null, + "metric": "not disclosed", + "period": null + }, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "reviewer said no response; company later said review includes traffic and content", + "limits": "Single unverified report; no scale or final result." + } + ], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Could fit publishers needing managed web/app monetization with human support; ask the team for review because no public scale band exists.", + "currentNetworkSignals": [ + "Share the current stack and ask whether this replaces it or adds formats.", + "Worldwide availability does not imply equal demand or approval everywhere." + ], + "geographyPreference": "Worldwide availability; no qualifying share published.", + "agePreference": "No site-age rule found.", + "confidence": "low", + "rationale": "Official FAQ provides a contact route and worldwide availability, but no numeric entry example.", + "supportingSourceUrls": [ + "https://refinery89.com/docs/faqs/requirements/am-i-eligible/", + "https://refinery89.com/docs/faqs/about-refinery89/where-does-refinery89-operate-and-offer-its-services/", + "https://refinery89.com/get-started/" + ], + "gaps": [ + "No public share or standard pay date.", + "No successful independent application with traffic metrics.", + "Regional payout floor can vary." + ] + }, + "sources": [ + { + "url": "https://refinery89.com/docs/faqs/requirements/am-i-eligible/", + "title": "Eligibility FAQ", + "kind": "official FAQ", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "no numeric threshold", + "contact review" + ] + }, + { + "url": "https://refinery89.com/docs/faqs/about-refinery89/where-does-refinery89-operate-and-offer-its-services/", + "title": "Service locations", + "kind": "official FAQ", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "worldwide service" + ] + }, + { + "url": "https://refinery89.com/docs/faqs/finance/is-there-a-minimum-threshold-for-getting-paid/", + "title": "Payout threshold", + "kind": "official FAQ", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "250 EUR/USD payout floor" + ] + }, + { + "url": "https://www.trustpilot.com/review/refinery89.com", + "title": "Publisher reviews", + "kind": "publisher-submitted", + "publishedAt": "2025-2026", + "checkedAt": "2026-10-22", + "claims": [ + "unverified support complaint and reply" + ] + }, + { + "url": "https://refinery89.com/get-started/", + "title": "Publisher and app Get Started form", + "kind": "official application", + "publishedAt": null, + "checkedAt": "2026-10-23", + "claims": [ + "accepts publisher website or app details", + "asks pageview band and country", + "form intake is not a published admission threshold" + ] + } + ] + }, + { + "slug": "revcontent", + "checkedAt": "2026-10-22", + "productType": "Native content recommendation widget and sponsored discovery demand", + "applicationUrl": "https://www.revcontent.com/resources/revcontent-publisher-application", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Agreement payment floor", + "value": "$250", + "note": "payment-method minimums may differ", + "sourceUrl": "https://help.revcontent.com/knowledge/publisher-terms" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "No minimum pageviews or traffic; publisher account and every domain are reviewed case by case", + "sourceUrl": "https://help.revcontent.com/knowledge/creating-a-revcontent-publisher-account", + "note": "Applications are reviewed case by case" + }, + { + "label": "Visitor location", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Content", + "value": "No illegal, infringing, pornographic, obscene, illicit-drug, or unlawful-gambling content", + "sourceUrl": "https://help.revcontent.com/knowledge/publisher-terms" + }, + { + "label": "Google standing", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Must connect", + "value": "After domain approval, Revcontent sends placement choices and widget code", + "sourceUrl": "https://help.revcontent.com/knowledge/creating-a-revcontent-publisher-account" + }, + { + "label": "Approval time", + "value": "Each application and domain is reviewed by a human team; no timing is stated", + "sourceUrl": "https://help.revcontent.com/knowledge/creating-a-revcontent-publisher-account" + } + ], + "revenueShare": "Set in the applicable account or order terms; no standard public rate", + "paymentTerms": null, + "paymentThreshold": "$250 in the agreement; method minimums are $100 for US ACH, $100 for international PayPal, and $1,000 for international wire", + "paymentMethods": [ + "ACH (US)", + "PayPal (international)", + "Wire transfer (international)" + ], + "sources": [ + { + "label": "Publisher account creation and approval", + "url": "https://help.revcontent.com/knowledge/creating-a-revcontent-publisher-account" + }, + { + "label": "Publisher terms", + "url": "https://help.revcontent.com/knowledge/publisher-terms" + }, + { + "label": "Publisher payment requirements and methods", + "url": "https://help.revcontent.com/knowledge/publisher-payment-requirements-methods" + } + ] + }, + "fit": { + "publisherTypes": [ + "content publishers", + "news/editorial sites", + "publishers testing native recommendation inventory" + ], + "nichesStrong": [ + "policy-compliant editorial content" + ], + "nichesWeak": [ + "publishers wanting a full display-stack replacement", + "sites with prohibited content" + ], + "geographies": [ + "Payment method depends on location; no admission geo rule found" + ], + "role": "supplemental", + "entryPositioning": "No numeric traffic floor, but human review applies to each account and each domain.", + "compatibilityNotes": [ + "A recommendation widget can supplement a display stack, subject to terms.", + "No-minimum does not mean automatic approval.", + "Payment floors vary by method/location." + ] + }, + "officialRequirements": [ + { + "metric": "pageviews/traffic", + "comparator": "no minimum; human case-by-case review", + "amount": null, + "unit": "traffic", + "period": null, + "scope": "publisher account and every domain", + "program": "Revcontent", + "sourceUrl": "https://help.revcontent.com/knowledge/creating-a-revcontent-publisher-account" + } + ], + "observations": [ + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/bx97d2/", + "publishedAt": "2019", + "site": "anonymous publisher", + "niche": "not stated", + "traffic": { + "value": null, + "metric": "not stated", + "period": null + }, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "publisher alleged a balance was held after an invalid-traffic flag", + "limits": "Unverified, old dispute without site or traffic details." + } + ], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "A possible low-volume test for a publisher specifically seeking native recommendations, with compliant content and UX fit. Not a display replacement.", + "currentNetworkSignals": [ + "Check whether another recommendation product conflicts with exclusivity.", + "Ask how site-level reviews and appeals work." + ], + "geographyPreference": "No admission geo rule published.", + "agePreference": "No public site-age rule.", + "confidence": "medium", + "rationale": "Official help explicitly says no traffic minimum, while preserving discretionary account/domain reviews; recent independent entry reports are sparse.", + "supportingSourceUrls": [ + "https://help.revcontent.com/knowledge/creating-a-revcontent-publisher-account", + "https://help.revcontent.com/knowledge/publisher-terms" + ], + "gaps": [ + "No recent independent approval example with traffic and outcome.", + "No standard share or pay interval publicly stated.", + "Old user dispute is unverified." + ] + }, + "sources": [ + { + "url": "https://help.revcontent.com/knowledge/creating-a-revcontent-publisher-account", + "title": "Creating a publisher account", + "kind": "official help", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "no traffic minimum", + "human reviews" + ] + }, + { + "url": "https://www.revcontent.com/resources/revcontent-publisher-application", + "title": "Publisher application", + "kind": "official application", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "application route" + ] + }, + { + "url": "https://help.revcontent.com/knowledge/publisher-payment-requirements-methods", + "title": "Payment requirements", + "kind": "official help", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "tax/payee setup", + "location payment methods" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/bx97d2/", + "title": "Publisher payment dispute", + "kind": "publisher firsthand", + "publishedAt": "2019", + "checkedAt": "2026-10-22", + "claims": [ + "unverified invalid-traffic complaint" + ] + } + ] + }, + { + "slug": "setupad", + "checkedAt": "2026-10-22", + "productType": "Managed header-bidding service plus separate self-serve Prebid/GAM platform", + "applicationUrl": "https://signup.setupad.com/?lang=en&type=7", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Self-Serve entry", + "value": "10M+ monthly visits", + "note": "Free plan; separate from managed-service admission", + "sourceUrl": "https://setupad.com/setupad-self-serve/" + }, + { + "label": "Business Self-Serve fee", + "value": "€0.05 per 1,000 ad requests", + "note": "€50 minimum prepayment", + "sourceUrl": "https://setupad.com/setupad-self-serve/" + }, + { + "label": "Enterprise spend", + "value": "€1,000 minimum monthly spend", + "note": "50M+ visits; separate self-serve offer", + "sourceUrl": "https://setupad.com/setupad-self-serve/" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "Self-Serve plans start at 10M monthly visits; managed service has no verified current public cutoff", + "note": "Company articles conflict between 100,000 monthly visitors and sessions. Self-Serve is separate.", + "sourceUrl": "https://setupad.com/setupad-self-serve/" + }, + { + "label": "Visitor location", + "value": "Main traffic from the US, UK, Canada, or Australia", + "sourceUrl": "https://setupad.com/blog/best-ad-networks-for-publishers/" + }, + { + "label": "Content", + "value": "Follow Setupad’s quality policy; low-quality sites are not accepted", + "sourceUrl": "https://setupad.com/blog/best-ad-networks-for-publishers/" + }, + { + "label": "Google standing", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Must connect", + "value": "Add ads.txt and use Setupad demand sources, including Google", + "sourceUrl": "https://setupad.com/blog/best-ad-networks-for-publishers/" + }, + { + "label": "Approval time", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Self-Serve", + "value": "Requires own GAM, direct SSPs, a high-quality site, and internal approval", + "sourceUrl": "https://setupad.com/setupad-self-serve/" + }, + { + "label": "Application", + "value": "The live form is for Self-Serve and requests a plan plus Google Analytics domain verification; it does not define managed-service eligibility.", + "sourceUrl": "https://signup.setupad.com/?lang=en&type=7" + } + ], + "revenueShare": "Optional Setupad reseller demand takes 20%; Self-Serve direct demand uses a €0.05 CPM fee", + "paymentTerms": "Net 60 for published managed terms and optional reseller demand; direct SSP partners pay under their own agreements", + "paymentThreshold": "$100 in published managed guidance; reseller-demand threshold not stated", + "paymentMethods": [ + "Bank transfer", + "PayPal", + "Payoneer", + "Wise", + "Revolut", + "Paysera" + ], + "sources": [ + { + "label": "Setupad publisher requirements and payment guidance", + "url": "https://setupad.com/blog/best-ad-networks-for-publishers/" + }, + { + "label": "Setupad Self-Serve plans, requirements and billing", + "url": "https://setupad.com/setupad-self-serve/" + }, + { + "label": "Setupad current platform overview", + "url": "https://setupad.com/" + }, + { + "label": "Setupad SSP guide", + "url": "https://setupad.com/blog/top-ssps-for-publishers/" + }, + { + "label": "Setupad Self-Serve application", + "url": "https://signup.setupad.com/?lang=en&type=7" + } + ], + "joinSummary": "Self-Serve: 10M+ monthly visits; managed service has no confirmed current public floor" + }, + "fit": { + "publisherTypes": [ + "mid/large web publishers", + "publishers with their own GAM and SSPs", + "publishers seeking managed wrapper or auction controls" + ], + "nichesStrong": [ + "content publishing; country fit depends on demand" + ], + "nichesWeak": [], + "geographies": [ + "One 2024 report shows a mostly Asian traffic site, not a policy preference" + ], + "role": "infrastructure", + "entryPositioning": "Separate managed and Self-Serve offers. Self-Serve has explicit visit bands starting at 10M; managed-service ~100K descriptions are older/unclear.", + "compatibilityNotes": [ + "Self-Serve layers over publisher-owned GAM/SSPs.", + "Managed service may replace a current managed provider.", + "Visits are not pageviews or sessions." + ] + }, + "officialRequirements": [ + { + "metric": "monthly visits", + "comparator": "at least for Free Self-Serve", + "amount": 10000000, + "unit": "visits", + "period": "month", + "scope": "publisher website", + "program": "Setupad Self-Serve Free", + "sourceUrl": "https://setupad.com/setupad-self-serve/" + }, + { + "metric": "monthly visits", + "comparator": "10M to 50M for Business plan", + "amount": "10M–50M", + "unit": "visits", + "period": "month", + "scope": "publisher website", + "program": "Setupad Self-Serve Business", + "sourceUrl": "https://setupad.com/setupad-self-serve/", + "note": "€0.05 per thousand ad requests and €50 prepayment." + }, + { + "metric": "monthly visits", + "comparator": "at least for Enterprise", + "amount": 50000000, + "unit": "visits", + "period": "month", + "scope": "publisher website", + "program": "Setupad Self-Serve Enterprise", + "sourceUrl": "https://setupad.com/setupad-self-serve/", + "note": "€1,000 minimum monthly spend." + } + ], + "observations": [ + { + "sourceUrl": "https://medium.com/@vibrant_mango_impala_136/setupad-review-my-1-year-with-setupad-and-why-i-ultimately-switched-back-to-google-adsense-150fd77506d5", + "publishedAt": "2024-10-11", + "site": "anonymous Japanese publisher", + "niche": "web content site", + "traffic": { + "value": 3000000, + "metric": "pageviews", + "period": "month" + }, + "adRevenueMonthlyUsd": null, + "countries": [ + "mostly Asia", + "Europe and North America" + ], + "decision": "used Setupad for one year, then returned to AdSense; described implementation/performance concerns", + "limits": "No revenue amount; one anonymous report." + } + ], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Self-Serve fits publishers at 10M+ monthly visits with own GAM and direct SSP accounts. Managed service may be available lower, but public ~100K wording is old and inconsistent.", + "currentNetworkSignals": [ + "Owned GAM/SSPs align with Self-Serve.", + "Current managed partner may overlap with managed Setupad." + ], + "geographyPreference": "No reliable managed geography gate; one report with mainly Asian traffic.", + "agePreference": "No age rule found.", + "confidence": "high", + "rationale": "Current official Self-Serve plan bands are clear; managed admission remains uncertain.", + "supportingSourceUrls": [ + "https://setupad.com/setupad-self-serve/", + "https://medium.com/@vibrant_mango_impala_136/setupad-review-my-1-year-with-setupad-and-why-i-ultimately-switched-back-to-google-adsense-150fd77506d5" + ], + "gaps": [ + "No current managed-service minimum.", + "Historical 100K visitor/session wording conflicts.", + "No independent self-serve approval example." + ] + }, + "sources": [ + { + "url": "https://setupad.com/setupad-self-serve/", + "title": "Self-Serve plans and requirements", + "kind": "official pricing", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "10M/10-50M/50M visit bands", + "GAM/SSP", + "fees" + ] + }, + { + "url": "https://signup.setupad.com/?lang=en&type=7", + "title": "Setupad Self-Serve application", + "kind": "official application", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "application route" + ] + }, + { + "url": "https://setupad.com/blog/best-ad-networks-for-publishers/", + "title": "Managed Setupad guidance", + "kind": "company article", + "publishedAt": null, + "checkedAt": "2026-10-16", + "claims": [ + "older unclear 100K claim" + ] + }, + { + "url": "https://medium.com/@vibrant_mango_impala_136/setupad-review-my-1-year-with-setupad-and-why-i-ultimately-switched-back-to-google-adsense-150fd77506d5", + "title": "One-year publisher review", + "kind": "publisher firsthand", + "publishedAt": "2024-10-11", + "checkedAt": "2026-10-22", + "claims": [ + "3M PV", + "geography", + "left for AdSense" + ] + }, + { + "url": "https://signup.setupad.com/?lang=en&type=7", + "title": "Setupad Self-Serve application", + "kind": "official application", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "plan selection and domain verification for the separate Self-Serve product" + ] + } + ] + }, + { + "slug": "she-media", + "checkedAt": "2026-10-23", + "productType": "Managed publisher/creator collective with display, video, native, and sponsored programs", + "applicationUrl": "https://apply.shemedia.com/", + "directoryPatch": { + "checkedAt": "2026-10-23", + "keyNumbers": [ + { + "label": "Traffic to join", + "value": "50,000+", + "note": "monthly pageviews; smaller sites may be considered case by case", + "sourceUrl": "https://www.shemedia.com/partner-network/faqs" + }, + { + "label": "Your share", + "value": "75%", + "note": "gross open-marketplace programmatic revenue; guide updated March 2023", + "sourceUrl": "https://www.shemedia.com/member-spotlight/member-guide-for-partners" + }, + { + "label": "Pay day", + "value": "Net 35", + "sourceUrl": "https://www.shemedia.com/partner-network/faqs" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "At least 50,000 pageviews/month for standard approval; smaller sites may be considered case by case", + "note": "Smaller sites can receive individual review; no lower numeric requirement is published", + "sourceUrl": "https://www.shemedia.com/partner-network/faqs" + }, + { + "label": "Visitor location", + "value": "At least 30% US traffic", + "sourceUrl": "https://www.shemedia.com/partner-network/faqs" + }, + { + "label": "Content", + "value": "Original, high-quality, brand-safe, human-led content", + "note": "AI-generated images need a clear disclaimer", + "sourceUrl": "https://www.shemedia.com/partner-network/faqs" + }, + { + "label": "Google standing", + "value": "Good track record with Google ad products and platforms", + "sourceUrl": "https://www.shemedia.com/partner-network/faqs" + }, + { + "label": "Must connect", + "value": "Google MCM and ads.txt", + "note": "MCM and ads.txt are part of the onboarding requirements", + "sourceUrl": "https://support.shemedia.com/hc/en-us/articles/19361668032027-Onboarding-Guide-for-Wordpress-Sites" + }, + { + "label": "Approval time", + "value": "3–4 weeks for a response", + "note": "Response timing, not a final decision guarantee", + "sourceUrl": "https://www.shemedia.com/partner-network/faqs" + }, + { + "label": "Analytics", + "value": "Google Analytics access", + "sourceUrl": "https://apply.shemedia.com/" + }, + { + "label": "Site age", + "value": "At least 90 days", + "sourceUrl": "https://www.shemedia.com/partner-network/faqs" + }, + { + "label": "Ad inventory", + "value": "Exclusive mobile and desktop banner ads", + "note": "Affiliate links and banners are exceptions", + "sourceUrl": "https://www.shemedia.com/partner-network/faqs" + }, + { + "label": "Application", + "value": "Form asks average monthly GA pageviews, current ad networks, and publishing platform; it says Wix-built sites are ineligible and asks for GA access to verify traffic.", + "sourceUrl": "https://apply.shemedia.com/" + } + ], + "revenueShare": "75% of gross open-marketplace programmatic revenue; up to 75% of direct and private marketplace revenue (Member Guide updated 2023)", + "paymentTerms": "Net 35 after the month closes", + "paymentThreshold": "$20 (Member Guide updated 2023)", + "paymentMethods": [ + "US direct deposit/ACH", + "US check if ACH is unavailable", + "PayPal for international publishers", + "Wise/ACH or wire for international publishers if approved" + ], + "sources": [ + { + "label": "Partner FAQ", + "url": "https://www.shemedia.com/partner-network/faqs" + }, + { + "label": "Publisher application", + "url": "https://apply.shemedia.com/" + }, + { + "label": "WordPress onboarding guide", + "url": "https://support.shemedia.com/hc/en-us/articles/19361668032027-Onboarding-Guide-for-Wordpress-Sites" + }, + { + "label": "Blogger onboarding guide", + "url": "https://support.shemedia.com/hc/en-us/articles/30950543170971-Onboarding-Guide-for-Blogger-Sites" + }, + { + "label": "Member Guide, updated March 2023", + "url": "https://www.shemedia.com/member-spotlight/member-guide-for-partners" + }, + { + "label": "International payment options, updated April 2025", + "url": "https://support.shemedia.com/hc/en-us/articles/35987097977627-Payment-Options-for-Publishers-Outside-the-US" + } + ], + "joinSummary": "50,000 pageviews a month; smaller sites need individual review" + }, + "fit": { + "publisherTypes": [ + "bloggers and creator-led sites", + "US-focused content publishers", + "community-oriented publications" + ], + "nichesStrong": [ + "lifestyle", + "food", + "parenting", + "DIY", + "women-focused editorial" + ], + "nichesWeak": [ + "sites without original human-led content or sufficient US audience" + ], + "geographies": [ + "At least 30% US traffic" + ], + "role": "primary", + "entryPositioning": "50K monthly PV is standard approval requirement; lower-volume exceptions depend on content, publishing consistency, and growth.", + "compatibilityNotes": [ + "Exclusive mobile and desktop banner inventory is part of standard relationship; affiliate exceptions exist.", + "Managed primary display service may replace current network.", + "Do not compare sessions directly to pageviews." + ] + }, + "officialRequirements": [ + { + "metric": "pageviews", + "comparator": "at least standard requirement; smaller sites may be case-by-case", + "amount": 50000, + "unit": "pageviews", + "period": "month", + "scope": "publisher website", + "program": "SHE Media", + "sourceUrl": "https://www.shemedia.com/partner-network/faqs" + }, + { + "metric": "US traffic share", + "comparator": "at least", + "amount": 30, + "unit": "percent", + "period": null, + "scope": "publisher audience", + "program": "SHE Media", + "sourceUrl": "https://www.shemedia.com/partner-network/faqs" + }, + { + "metric": "site age", + "comparator": "at least", + "amount": 90, + "unit": "days", + "period": "age", + "scope": "publisher site", + "program": "SHE Media", + "sourceUrl": "https://www.shemedia.com/partner-network/faqs" + }, + { + "metric": "site platform", + "comparator": "Wix-built sites are ineligible", + "amount": null, + "unit": "platform restriction", + "period": "current application", + "scope": "publisher website", + "program": "SHE Media", + "sourceUrl": "https://apply.shemedia.com/", + "note": "The application form says sites built using Wix are ineligible." + }, + { + "metric": "Google Analytics authorization", + "comparator": "required to verify pageviews during application review", + "amount": null, + "unit": "analytics access", + "period": "application review", + "scope": "publisher website", + "program": "SHE Media", + "sourceUrl": "https://apply.shemedia.com/" + } + ], + "observations": [ + { + "sourceUrl": "https://imperfectidealist.com/she-media-review/", + "publishedAt": "2020-10 (approx.)", + "site": "Imperfect Idealist", + "niche": "lifestyle", + "traffic": { + "value": 25500, + "metric": "sessions", + "period": "month" + }, + "adRevenueMonthlyUsd": 124, + "countries": [], + "decision": "publisher blog reported $124 for October", + "limits": "Old data; session count cannot be compared to the 50K PV standard and is not proof of an exception." + } + ], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Recommend when 50K pageviews, 30% US, age 90 days, and editorial/content conditions match. Below that, treat as discretionary exception only.", + "currentNetworkSignals": [ + "Exclusive display inventory may require replacing current managed network.", + "The application asks which ad networks the site currently uses; treat this as compatibility context, not proof of eligibility." + ], + "geographyPreference": "At least 30% US.", + "agePreference": "At least 90 days.", + "confidence": "high", + "rationale": "Current official FAQ describes 50K as approval requirement and expressly allows selective lower-volume approvals.", + "supportingSourceUrls": [ + "https://www.shemedia.com/partner-network/faqs", + "https://imperfectidealist.com/she-media-review/", + "https://apply.shemedia.com/" + ], + "gaps": [ + "No recent independent below-50K PV approval.", + "Share and $20 payout floor appear in March 2023 member guide." + ] + }, + "sources": [ + { + "url": "https://www.shemedia.com/partner-network/faqs", + "title": "Partner FAQ", + "kind": "official eligibility", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "50K standard", + "exceptions", + "30% US", + "90 days", + "human-led content" + ] + }, + { + "url": "https://www.shemedia.com/member-spotlight/member-guide-for-partners", + "title": "Member Guide", + "kind": "official guide", + "publishedAt": "2023-03", + "checkedAt": "2026-10-22", + "claims": [ + "75% share and $20 floor; dated" + ] + }, + { + "url": "https://support.shemedia.com/hc/en-us/articles/35987097977627-Payment-Options-for-Publishers-Outside-the-US", + "title": "International payout options", + "kind": "official support", + "publishedAt": "2025-04", + "checkedAt": "2026-10-22", + "claims": [ + "international methods" + ] + }, + { + "url": "https://imperfectidealist.com/she-media-review/", + "title": "SHE Media publisher review", + "kind": "publisher firsthand", + "publishedAt": "2020-10 approx.", + "checkedAt": "2026-10-22", + "claims": [ + "25.5K sessions", + "October earnings" + ] + }, + { + "url": "https://apply.shemedia.com/", + "title": "SHE Media publisher application", + "kind": "official application", + "publishedAt": null, + "checkedAt": "2026-10-23", + "claims": [ + "asks average monthly pageviews in Google Analytics", + "asks current ad networks and publishing platform", + "Wix websites are ineligible", + "requests Google Analytics authorization for pageview verification" + ] + } + ] + }, + { + "slug": "snack-media", + "checkedAt": "2026-10-22", + "productType": "Sports-rooted managed monetization, direct sales, ad tech, video, and bespoke demand", + "applicationUrl": "https://www.snack-media.com/publishers/", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Referral program traffic", + "value": "1 million", + "note": "impressions; not a general minimum, only for referral eligibility", + "sourceUrl": "https://www.snack-media.com/referral/" + }, + { + "label": "Notice to leave", + "value": "30 days", + "sourceUrl": "https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "No universal traffic floor in 2025 agreement; 1M impressions applies only to referral eligibility", + "note": "This is referral-program eligibility; the publisher agreement does not state a universal traffic floor", + "sourceUrl": "https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf" + }, + { + "label": "Visitor location", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Content", + "value": "No hateful, pornographic, illegal, or infringing content", + "note": "The referral program also excludes sensitive and gambling sites", + "sourceUrl": "https://www.snack-media.com/brand-safety-policy/" + }, + { + "label": "Google standing", + "value": "Must comply with Google policies for the referral program", + "sourceUrl": "https://www.snack-media.com/referral/" + }, + { + "label": "Must connect", + "value": "Share live traffic stats and install network tags", + "note": "Tags must be live within 14 days of the agreement date", + "sourceUrl": "https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf" + }, + { + "label": "Approval time", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Exclusivity", + "value": "Standard agreement gives Snack exclusive rights for its defined services and specified ad/content sales scope; confirm cover sheet", + "sourceUrl": "https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf" + } + ], + "revenueShare": null, + "paymentTerms": "Within 30 days after the month when Snack Media receives the advertiser funds", + "paymentThreshold": null, + "paymentMethods": [], + "sources": [ + { + "label": "Publisher referral eligibility", + "url": "https://www.snack-media.com/referral/" + }, + { + "label": "Brand safety policy", + "url": "https://www.snack-media.com/brand-safety-policy/" + }, + { + "label": "2025 publisher agreement terms", + "url": "https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf" + }, + { + "label": "Terms page", + "url": "https://www.snack-media.com/Ad_Network_Terms_and_Conditions_for_Publishers/" + }, + { + "label": "Snack publisher services", + "url": "https://www.snack-media.com/publishers/" + } + ] + }, + "fit": { + "publisherTypes": [ + "sports publishers and rights holders", + "sports/entertainment communities", + "publishers wanting direct-sales/video support" + ], + "nichesStrong": [ + "sports", + "sports communities", + "entertainment" + ], + "nichesWeak": [], + "geographies": [ + "No country preference found" + ], + "role": "sales_collective", + "entryPositioning": "Sales-led partnership; standard agreement has no universal traffic minimum. Referral-program 1M impression condition is not admission.", + "compatibilityNotes": [ + "Fully managed service may replace current stack.", + "Bespoke service says publisher can keep wrapper and use Snack demand.", + "Check standard agreement’s scoped exclusivity and cover sheet." + ] + }, + "officialRequirements": [ + { + "metric": "publisher traffic", + "comparator": "no universal minimum published in standard agreement", + "amount": null, + "unit": "not stated", + "period": null, + "scope": "publisher property", + "program": "Snack Media", + "sourceUrl": "https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf" + }, + { + "metric": "impressions", + "comparator": "minimum for referral offer only", + "amount": 1000000, + "unit": "impressions", + "period": null, + "scope": "publisher property", + "program": "Snack referral", + "sourceUrl": "https://www.snack-media.com/referral/", + "note": "Not general admission." + }, + { + "metric": "tag setup", + "comparator": "within", + "amount": 14, + "unit": "days", + "period": "after agreement", + "scope": "agreed ad positions", + "program": "Snack Media", + "sourceUrl": "https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf" + } + ], + "observations": [], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Strongest evidence supports sports and sports-community publishers that want managed monetization, direct sales, or video. Generic small blogs are not a clear fit from public material.", + "currentNetworkSignals": [ + "Clarify managed replacement versus demand over own wrapper.", + "Review exclusivity and direct-sales rights against current contract." + ], + "geographyPreference": "No preference published.", + "agePreference": "No age rule found.", + "confidence": "medium", + "rationale": "Official offer differentiates fully managed and bespoke routes; contract sets commission and scope without traffic threshold.", + "supportingSourceUrls": [ + "https://www.snack-media.com/publishers/", + "https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf" + ], + "gaps": [ + "No independent entry example.", + "No published revenue share, payout floor, or payment method." + ] + }, + "sources": [ + { + "url": "https://www.snack-media.com/publishers/", + "title": "Publisher solutions", + "kind": "official product", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "managed and bespoke services" + ] + }, + { + "url": "https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf", + "title": "2025 ad network terms", + "kind": "official contract", + "publishedAt": "2025-08", + "checkedAt": "2026-10-22", + "claims": [ + "exclusivity scope", + "commission", + "payment after advertiser funds", + "setup" + ] + }, + { + "url": "https://www.snack-media.com/referral/", + "title": "Referral offer", + "kind": "official referral", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "1M impressions referral condition" + ] + } + ] + }, + { + "slug": "sovrn", + "checkedAt": "2026-10-22", + "productType": "Sovrn Ad Exchange demand plus separate Sovrn Commerce affiliate product", + "applicationUrl": "https://platform.sovrn.com/account/signup", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Visits to join", + "value": "More than 100,000", + "note": "visits a month, strictly more than 100,000", + "sourceUrl": "https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property" + }, + { + "label": "Pay day", + "value": "Net 45", + "note": "for most direct publishers; terms may vary", + "sourceUrl": "https://authcore.atlassian.net/wiki/spaces/KB/pages/2693627510846" + }, + { + "label": "Payment minimum", + "value": "$25", + "note": "$50 for wire", + "sourceUrl": "https://knowledge.sovrn.com/kb/what-is-the-minimum-payment-threshold-for-sovrn" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "Strictly more than 100,000 visits/month for Ad Exchange; visits are not sessions", + "sourceUrl": "https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property", + "note": "Visits are not sessions." + }, + { + "label": "Visitor location", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Content", + "value": "Current content published within 4 months, privacy and brand-safety policies, not child-directed or exclusively under 16", + "sourceUrl": "https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property" + }, + { + "label": "Google standing", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Must connect", + "value": "Provide an operational business domain and current ads.txt ownership details; intermediaries also need sellers.json", + "sourceUrl": "https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property" + }, + { + "label": "Approval time", + "value": "Depends on external checks and possible manual review; no fixed estimate. File updates often show within about two business days.", + "sourceUrl": "https://knowledge.sovrn.com/kb/what-is-sovrn-s-approval-process-for-the-ad-exchange" + }, + { + "label": "Application", + "value": "Create a platform account first, then start Ad Exchange onboarding; Sovrn Commerce is a separate product.", + "sourceUrl": "https://platform.sovrn.com/account/signup" + } + ], + "revenueShare": null, + "paymentTerms": "Net 45 for most Ad Exchange publishers; individual publisher terms may vary", + "paymentThreshold": "$25 standard; $50 for wire transfer", + "paymentMethods": [ + "PayPal", + "ACH (US)", + "Wire transfer", + "eCheck/local transfer", + "Paper check (US)" + ], + "sources": [ + { + "label": "Property approval requirements", + "url": "https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property" + }, + { + "label": "Approval process and timing", + "url": "https://knowledge.sovrn.com/kb/what-is-sovrn-s-approval-process-for-the-ad-exchange" + }, + { + "label": "Current payment methods", + "url": "https://knowledge.sovrn.com/kb/how-do-i-get-paid-for-the-ad-exchange" + }, + { + "label": "Payment thresholds", + "url": "https://knowledge.sovrn.com/kb/what-is-the-minimum-payment-threshold-for-sovrn" + }, + { + "label": "Payment timing guide", + "url": "https://authcore.atlassian.net/wiki/spaces/KB/pages/2693627510846" + }, + { + "label": "Ad Exchange account sign-up", + "url": "https://platform.sovrn.com/account/signup" + } + ] + }, + "fit": { + "publisherTypes": [ + "independent web publishers", + "publishers adding programmatic demand", + "sites with maintained content and ads.txt ownership records" + ], + "nichesStrong": [ + "general web publishing with current content" + ], + "nichesWeak": [ + "sites below >100K visits/month", + "child-directed/exclusively under-16 sites" + ], + "geographies": [ + "No country-share gate found" + ], + "role": "supplemental", + "entryPositioning": "Ad Exchange requires strictly >100K monthly visits plus content/privacy/safety checks. Commerce is separate.", + "compatibilityNotes": [ + "Ad Exchange can supplement publisher-owned stack.", + "Do not conflate Ad Exchange with affiliate Commerce eligibility/payments.", + "Visits are not sessions, users, or pageviews." + ] + }, + "officialRequirements": [ + { + "metric": "traffic volume", + "comparator": "strictly more than", + "amount": 100000, + "unit": "visits", + "period": "month", + "scope": "publisher property", + "program": "Sovrn Ad Exchange", + "sourceUrl": "https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property", + "note": "Do not map visits to sessions." + }, + { + "metric": "recent content", + "comparator": "publication within prior", + "amount": 4, + "unit": "months", + "period": "lookback", + "scope": "publisher site", + "program": "Sovrn Ad Exchange", + "sourceUrl": "https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property" + }, + { + "metric": "audience age", + "comparator": "not child-directed or exclusively under", + "amount": 16, + "unit": "years", + "period": null, + "scope": "publisher audience", + "program": "Sovrn Ad Exchange", + "sourceUrl": "https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property" + } + ], + "observations": [], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Not a likely fit below the strict visit floor. Above it, may add programmatic demand for publishers able to maintain the required ownership records and policies.", + "currentNetworkSignals": [ + "Can be supplemental to owned stack.", + "Commerce account does not prove Ad Exchange approval." + ], + "geographyPreference": "No qualifying country share published.", + "agePreference": "Audience not child-directed or exclusively under 16; no domain age rule found.", + "confidence": "high", + "rationale": "Official help article search extract states strict >100K visits plus ongoing-content and ownership checks; direct page open was unavailable in this pass.", + "supportingSourceUrls": [ + "https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property", + "https://knowledge.sovrn.com/kb/what-is-sovrn-s-approval-process-for-the-ad-exchange" + ], + "gaps": [ + "Direct page open unavailable during check.", + "No recent independent Ad Exchange entry report with outcome." + ] + }, + "sources": [ + { + "url": "https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property", + "title": "Property approval requirements", + "kind": "official help search result", + "publishedAt": "2026-10-22", + "checkedAt": "2026-10-22", + "claims": [ + ">100K visits", + "ownership and ads.txt" + ] + }, + { + "url": "https://knowledge.sovrn.com/kb/what-is-sovrn-s-approval-process-for-the-ad-exchange", + "title": "Approval process", + "kind": "official help", + "publishedAt": "2026-10-16", + "checkedAt": "2026-10-16", + "claims": [ + "content recency and safety" + ] + }, + { + "url": "https://knowledge.sovrn.com/kb/how-do-i-get-paid-for-the-ad-exchange", + "title": "Ad Exchange payments", + "kind": "official help", + "publishedAt": "2026-10-16", + "checkedAt": "2026-10-16", + "claims": [ + "payment methods" + ] + }, + { + "url": "https://platform.sovrn.com/account/signup", + "title": "Ad Exchange account sign-up", + "kind": "official application", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "create a platform account before starting Ad Exchange onboarding" + ] + } + ] + }, + { + "slug": "sparteo", + "checkedAt": "2026-10-22", + "productType": "Managed ad monetization and publisher technology suite", + "applicationUrl": "https://corporate.sparteo.com/contact", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [], + "joining": [ + { + "label": "Traffic", + "value": "Sales-led; no public numeric entry minimum found", + "sourceUrl": "https://corporate.sparteo.com/" + }, + { + "label": "Visitor location", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Content", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Google standing", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Must connect", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Approval time", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Application", + "value": "Contact the team for a sales-led publisher discussion; no self-serve application gate is published.", + "sourceUrl": "https://corporate.sparteo.com/contact" + } + ], + "revenueShare": null, + "paymentTerms": null, + "paymentThreshold": null, + "paymentMethods": [], + "sources": [ + { + "label": "Company and publisher services", + "url": "https://corporate.sparteo.com/" + }, + { + "label": "Publisher technology privacy notice", + "url": "https://corporate.sparteo.com/services-privacy-notice" + }, + { + "label": "Publisher platform case study", + "url": "https://corporate.sparteo.com/post/w3schools-rpm-uplift-unified-monetisation-stack" + }, + { + "label": "Company expansion update", + "url": "https://corporate.sparteo.com/post/sparteo-strengthens-supply-leadership-to-accelerate-global-expansion" + }, + { + "label": "Sparteo company LinkedIn", + "url": "https://www.linkedin.com/company/sparteo" + }, + { + "label": "Publisher contact form", + "url": "https://corporate.sparteo.com/contact" + } + ] + }, + "fit": { + "publisherTypes": [ + "growing/large content publishers", + "publishers needing managed yield, video, analytics, or consent tools" + ], + "nichesStrong": [ + "education/reference publishing (W3Schools case)" + ], + "nichesWeak": [ + "typical solo blogs (limited public entry evidence)" + ], + "geographies": [ + "No public regional rule found" + ], + "role": "infrastructure", + "entryPositioning": "Sales-led, with public traffic, revenue, age, country, and payment terms undisclosed.", + "compatibilityNotes": [ + "May replace or supplement stack depending on modules.", + "Ask about GAM, wrapper, and current SSPs.", + "Anonymous list of ad partners does not identify a Sparteo customer." + ] + }, + "officialRequirements": [ + { + "metric": "traffic/revenue/age/geography", + "comparator": "no public criteria found", + "amount": null, + "unit": "not stated", + "period": null, + "scope": "publisher services", + "program": "Sparteo", + "sourceUrl": "https://corporate.sparteo.com/" + } + ], + "observations": [], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Do not force into typical blogger shortlist. Consider for a publisher with meaningful operations needs, especially education/reference, after direct sales review.", + "currentNetworkSignals": [ + "Current partner does not establish Sparteo use or eligibility.", + "Clarify managed replacement versus selected technology modules." + ], + "geographyPreference": "Not public.", + "agePreference": "Not public.", + "confidence": "low", + "rationale": "Evidence is mostly official product pages and company-authored W3Schools case; no independent publisher report identifies Sparteo with scale/outcome.", + "supportingSourceUrls": [ + "https://corporate.sparteo.com/", + "https://corporate.sparteo.com/post/w3schools-rpm-uplift-unified-monetisation-stack" + ], + "gaps": [ + "No public admission or payment terms.", + "No independent entry case tied to Sparteo." + ] + }, + "sources": [ + { + "url": "https://corporate.sparteo.com/", + "title": "Publisher services", + "kind": "official product", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "managed yield and technology" + ] + }, + { + "url": "https://corporate.sparteo.com/post/w3schools-rpm-uplift-unified-monetisation-stack", + "title": "W3Schools case", + "kind": "vendor case", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "education publisher, no scale data" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/1sjz5b7/3_million_monthly_page_views_and_23k_monthly_ad/", + "title": "Gaming partner report", + "kind": "publisher firsthand", + "publishedAt": "2026-04 approx.", + "checkedAt": "2026-10-22", + "claims": [ + "3M PV/$2K-$3K but partner unnamed; not attributable" + ] + }, + { + "url": "https://corporate.sparteo.com/contact", + "title": "Publisher contact form", + "kind": "official application", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "sales-led publisher contact route" + ] + } + ] + }, + { + "slug": "taboola", + "checkedAt": "2026-10-22", + "productType": "Native content recommendation and audience discovery service", + "applicationUrl": "https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Pay day", + "value": "Within 45 days", + "note": "after the month ends", + "sourceUrl": "https://www.taboola.com/policies/publisher-revshare-terms-and-conditions-1-3-US" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "No numeric minimum stated in current account guide", + "sourceUrl": "https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account" + }, + { + "label": "Visitor location", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Content", + "value": "Own or properly license content and follow the Publisher Policy", + "sourceUrl": "https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account" + }, + { + "label": "Google standing", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Must connect", + "value": "Install Taboola widget code", + "sourceUrl": "https://developers.taboola.com/web-integrations/docs/welcome" + }, + { + "label": "Approval time", + "value": "Team responds within 48 hours", + "note": "This is response timing, not final approval", + "sourceUrl": "https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account" + }, + { + "label": "Applicant age", + "value": "At least 18 years old", + "sourceUrl": "https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account" + }, + { + "label": "Exclusivity", + "value": "Exclusive only against other third-party recommendation services under current guide", + "sourceUrl": "https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account" + } + ], + "revenueShare": "Set in the applicable publisher Order; no standard public percentage", + "paymentTerms": "Within 45 days after month-end; paid in US dollars", + "paymentThreshold": null, + "paymentMethods": [ + "Payoneer (most publishers); exceptions vary by location" + ], + "sources": [ + { + "label": "New publisher account guide", + "url": "https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account" + }, + { + "label": "Publisher policy", + "url": "https://pubhelp.taboola.com/hc/en-us/articles/360033751274-Taboola-Publisher-Policy" + }, + { + "label": "Web integration guide", + "url": "https://developers.taboola.com/web-integrations/docs/welcome" + }, + { + "label": "Publisher revenue-share terms", + "url": "https://www.taboola.com/policies/publisher-revshare-terms-and-conditions-1-3-US" + }, + { + "label": "Account setup and payment methods", + "url": "https://pubhelp.taboola.com/hc/en-us/articles/360003157054-Account-Set-Up" + } + ] + }, + "fit": { + "publisherTypes": [ + "news/editorial publishers", + "large content sites", + "publishers adding native recommendations" + ], + "nichesStrong": [ + "news", + "editorial/content discovery" + ], + "nichesWeak": [ + "sites seeking standard display replacement only" + ], + "geographies": [ + "No country-share threshold found" + ], + "role": "supplemental", + "entryPositioning": "No numeric traffic minimum in current guide; human/policy review remains. Response within 48 hours is not approval.", + "compatibilityNotes": [ + "Exclusive against other third-party recommendation services; ordinary display stack may remain.", + "Share is order-specific and payment method varies by geography." + ] + }, + "officialRequirements": [ + { + "metric": "traffic", + "comparator": "no numeric minimum stated", + "amount": null, + "unit": "not stated", + "period": null, + "scope": "publisher website", + "program": "Taboola", + "sourceUrl": "https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account" + }, + { + "metric": "applicant age", + "comparator": "at least", + "amount": 18, + "unit": "years", + "period": null, + "scope": "applicant", + "program": "Taboola", + "sourceUrl": "https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account" + }, + { + "metric": "recommendation exclusivity", + "comparator": "exclusive against third-party recommendation services", + "amount": null, + "unit": "contract condition", + "period": "agreement term", + "scope": "recommendation inventory", + "program": "Taboola", + "sourceUrl": "https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account" + } + ], + "observations": [ + { + "sourceUrl": "https://www.taboola.com/resources/case-studies/the-independent-uk", + "publishedAt": "date not shown; checked 2026-10-22", + "site": "The Independent (vendor case)", + "niche": "news", + "traffic": { + "value": 63000000, + "metric": "global visitors", + "period": "not stated in reviewed case summary" + }, + "adRevenueMonthlyUsd": null, + "countries": [ + "UK publisher; global audience" + ], + "decision": "case reports 14% more Taboola ad revenue after in-article recommendation deployment", + "limits": "Vendor case, large publisher, not an entry example or typical performance forecast." + } + ], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Established content publisher with recommendation inventory and editorial controls; do not turn historical industry 500K–1M PV claims into current policy.", + "currentNetworkSignals": [ + "Check existing native recommendation providers; those conflict with Taboola exclusivity.", + "Separate display ad partners may remain subject to order." + ], + "geographyPreference": "No public geo threshold.", + "agePreference": "Applicant 18+; no domain-age minimum found.", + "confidence": "medium", + "rationale": "Current guide gives no numeric floor and narrowly defines recommendation-service exclusivity.", + "supportingSourceUrls": [ + "https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account", + "https://pubhelp.taboola.com/hc/en-us/articles/360033751274-Taboola-Publisher-Policy", + "https://www.taboola.com/resources/case-studies/the-independent-uk" + ], + "gaps": [ + "No independent current small-publisher entry report.", + "No payment floor; share order-specific." + ] + }, + "sources": [ + { + "url": "https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account", + "title": "New account guide", + "kind": "official help", + "publishedAt": "2026-10-22", + "checkedAt": "2026-10-22", + "claims": [ + "18+", + "ownership/content", + "recommendation exclusivity", + "48h response" + ] + }, + { + "url": "https://pubhelp.taboola.com/hc/en-us/articles/360033751274-Taboola-Publisher-Policy", + "title": "Publisher policy", + "kind": "official policy", + "publishedAt": "2026-10-20", + "checkedAt": "2026-10-22", + "claims": [ + "content rules" + ] + }, + { + "url": "https://www.taboola.com/resources/case-studies/the-independent-uk", + "title": "The Independent case", + "kind": "vendor case", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "scale and 14% reported uplift" + ] + } + ] + }, + { + "slug": "teads", + "checkedAt": "2026-10-22", + "productType": "Sales-led premium media-owner monetization, video formats, and cross-screen demand", + "applicationUrl": "https://www.teads.com/teads-contact/", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [], + "joining": [ + { + "label": "Traffic", + "value": "Sales-led media-owner partnership; no public numeric threshold", + "sourceUrl": "https://www.teads.com/media-owners" + }, + { + "label": "Visitor location", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Content", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Google standing", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Must connect", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Approval time", + "value": "Not public", + "sourceUrl": null + } + ], + "revenueShare": "Terms vary by contract; revenue-share rates may vary with pageview volume or total revenue", + "paymentTerms": "Negotiated in the media-partner contract; no standard payment interval is published", + "paymentThreshold": null, + "paymentMethods": [], + "sources": [ + { + "label": "Media owner partnership", + "url": "https://www.teads.com/media-owners" + }, + { + "label": "2025 annual filing describing publisher agreements and negotiated payment timing", + "url": "https://www.sec.gov/Archives/edgar/data/1454938/000145493826000015/tead-20251231.htm" + } + ] + }, + "fit": { + "publisherTypes": [ + "established editorial publishers", + "publishers with video/in-article inventory", + "web/app/CTV media owners" + ], + "nichesStrong": [ + "news/editorial", + "education/history", + "local publishing" + ], + "nichesWeak": [ + "small sites seeking self-serve display ads (limited evidence)" + ], + "geographies": [ + "No country minimum; local consent/market can affect activation" + ], + "role": "supplemental", + "entryPositioning": "No public traffic or revenue floor; qualification appears sales-led and depends on format and market.", + "compatibilityNotes": [ + "Often supplements existing stack with video/premium demand.", + "Confirm whether tags are additive or exclusive for a format.", + "Setup and demand activation are separate steps." + ] + }, + "officialRequirements": [ + { + "metric": "traffic/revenue/age/geography", + "comparator": "no universal numeric rule published", + "amount": null, + "unit": "not stated", + "period": null, + "scope": "media-owner partnership", + "program": "Teads", + "sourceUrl": "https://www.teads.com/media-owners" + } + ], + "observations": [ + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/1rr1frr/", + "publishedAt": "2026-03-11 approx.", + "site": "anonymous Italian educational/history site", + "niche": "education/history", + "traffic": { + "value": null, + "metric": "volume not reported; 2.7 pages/session and ~7-minute average session", + "period": "not stated" + }, + "adRevenueMonthlyUsd": null, + "countries": [ + "Italy" + ], + "decision": "publisher said recently approved and installed in-article tags, but demand had not activated", + "limits": "No PV/revenue data; 11-day activation comment was a separate publisher’s client." + } + ], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Most promising for established publishers with premium editorial or video inventory. Engagement/country mix may help the sales conversation but is not an official gate.", + "currentNetworkSignals": [ + "Ask whether Teads is incremental to current video/display stack.", + "Current network does not prove admission." + ], + "geographyPreference": "No hard rule; EU consent checks may affect activation.", + "agePreference": "No site-age rule found.", + "confidence": "low", + "rationale": "Official pages and filing describe sales-led media-owner relationships; recent acceptance report lacks volume.", + "supportingSourceUrls": [ + "https://www.teads.com/media-owners", + "https://www.teads.com/teads-contact/", + "https://www.reddit.com/r/adops/comments/1rr1frr/" + ], + "gaps": [ + "No public floor/share/payment method.", + "No recent detailed acceptance example." + ] + }, + "sources": [ + { + "url": "https://www.teads.com/media-owners", + "title": "Media owners", + "kind": "official product", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "premium formats and cross-screen publisher offer" + ] + }, + { + "url": "https://www.teads.com/teads-contact/", + "title": "Contact", + "kind": "official contact", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "sales route" + ] + }, + { + "url": "https://investors.teads.com/static-files/4f470000-7ee3-4919-9e4d-506e65a44af4", + "title": "Publisher agreement filing", + "kind": "company filing", + "publishedAt": "2025", + "checkedAt": "2026-10-16", + "claims": [ + "negotiated contract terms" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/1rr1frr/", + "title": "Italian publisher discussion", + "kind": "publisher firsthand", + "publishedAt": "2026-03 approx.", + "checkedAt": "2026-10-22", + "claims": [ + "approval", + "engagement", + "activation lag" + ] + } + ] + }, + { + "slug": "the-moneytizer", + "checkedAt": "2026-10-22", + "productType": "Managed multi-format website advertising monetization", + "applicationUrl": "https://us.themoneytizer.com/", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [ + { + "label": "Organic audience to join", + "value": "300,000 unique visitors", + "note": "Organic traffic in prior 30 days; US/UK/CA", + "sourceUrl": "https://us.themoneytizer.com/faq/validation-criteria" + }, + { + "label": "Publisher share", + "value": "At least 70%", + "note": "pre-tax advertiser billings under terms", + "sourceUrl": "https://www.themoneytizer.com/cgu" + }, + { + "label": "Payout threshold", + "value": "€50 or $50", + "note": "market-specific", + "sourceUrl": "https://us.themoneytizer.com/category/payments-invoices" + } + ], + "joining": [ + { + "label": "Traffic", + "value": "At least 300,000 unique visitors from organic traffic in the 30 days before registration; qualifying countries US/UK/CA", + "sourceUrl": "https://us.themoneytizer.com/faq/validation-criteria" + }, + { + "label": "Visitor location", + "value": "Qualifying organic unique visitors must be from the US, UK, or Canada", + "sourceUrl": "https://us.themoneytizer.com/faq/validation-criteria" + }, + { + "label": "Content", + "value": "Own domain/server access, sufficient current content; listed restricted categories excluded", + "sourceUrl": "https://us.themoneytizer.com/faq/validation-criteria" + }, + { + "label": "Google standing", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Must connect", + "value": "Install ads.txt and ad tags; use a consent banner for EU traffic", + "sourceUrl": "https://us.themoneytizer.com/publisherguide" + }, + { + "label": "Approval time", + "value": "A quality review follows website registration; no timing stated", + "sourceUrl": "https://us.themoneytizer.com/publisherguide" + }, + { + "label": "Application", + "value": "Register an account, add the owned website in the portal, then wait for a quality review.", + "sourceUrl": "https://us.themoneytizer.com/" + } + ], + "revenueShare": "At least 70% of the pre-tax amount billed to advertisers under published Terms", + "paymentTerms": "An invoice is generated automatically at the threshold and is payable 60 days after its issue date", + "paymentThreshold": "€50 under the published Terms; $50 in the US publisher FAQ", + "paymentMethods": [ + "Bank transfer", + "PayPal" + ], + "sources": [ + { + "label": "Publisher terms and conditions", + "url": "https://www.themoneytizer.com/cgu" + }, + { + "label": "Publisher guide", + "url": "https://us.themoneytizer.com/publisherguide" + }, + { + "label": "US payments FAQ", + "url": "https://us.themoneytizer.com/category/payments-invoices" + }, + { + "label": "US validation criteria", + "url": "https://us.themoneytizer.com/faq/validation-criteria" + }, + { + "label": "US publisher sign-up page", + "url": "https://us.themoneytizer.com/" + } + ], + "joinSummary": "300,000 unique organic visitors in prior 30 days from US/UK/CA" + }, + "fit": { + "publisherTypes": [ + "established owned-domain websites", + "publishers with measurable organic audience and server access" + ], + "nichesStrong": [ + "current content with organic US/UK/CA audience" + ], + "nichesWeak": [ + "subdomains/subpages", + "Wix/Jimdo", + "streaming, illegal downloads, sexual/violent, dating, crypto, social, gambling" + ], + "geographies": [ + "300K organic unique visitors in 30 days; countries US/UK/CA" + ], + "role": "primary", + "entryPositioning": "Specific metric is organic unique visitors, not pageviews/sessions/all-source visitors. The current checker inputs cannot establish eligibility without new data.", + "compatibilityNotes": [ + "Managed multi-format monetization may replace current display stack.", + "Requires owned domain/server access for ads.txt.", + "Do not infer organic share from current network or traffic totals." + ] + }, + "officialRequirements": [ + { + "metric": "unique organic visitors", + "comparator": "at least", + "amount": 300000, + "unit": "unique visitors", + "period": "30 days before registration", + "scope": "traffic from US/UK/CA", + "program": "The Moneytizer", + "sourceUrl": "https://us.themoneytizer.com/faq/validation-criteria" + }, + { + "metric": "domain ownership", + "comparator": "must own; subdomains/subpages not accepted", + "amount": null, + "unit": "domain", + "period": null, + "scope": "publisher website", + "program": "The Moneytizer", + "sourceUrl": "https://us.themoneytizer.com/faq/validation-criteria" + }, + { + "metric": "content/server access", + "comparator": "sufficient current content and server access required; listed categories excluded", + "amount": null, + "unit": "quality/technology", + "period": "content maintained over time", + "scope": "publisher site", + "program": "The Moneytizer", + "sourceUrl": "https://us.themoneytizer.com/faq/validation-criteria" + } + ], + "observations": [], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Only shortlist when the publisher can report organic unique visitors and country breakdown for the prior 30 days. If they know only PV/sessions/visits, mark eligibility unknown.", + "currentNetworkSignals": [ + "Request channel-specific unique visitors; do not infer from another ad partner.", + "Confirm ads.txt/server access and EU consent setup." + ], + "geographyPreference": "Qualifying organic uniques in US, UK, and Canada.", + "agePreference": "No fixed domain age; enough updated content developed over time required.", + "confidence": "high", + "rationale": "Current official validation page states exact metric, period, country set, ownership, and content restrictions.", + "supportingSourceUrls": [ + "https://us.themoneytizer.com/faq/validation-criteria", + "https://us.themoneytizer.com/publisherguide", + "https://www.themoneytizer.com/cgu" + ], + "gaps": [ + "No first-hand report with exact organic-unique metric and result.", + "Page says “as of this year” with no policy effective date.", + "Checker needs organic unique visitor input to model this accurately." + ] + }, + "sources": [ + { + "url": "https://us.themoneytizer.com/faq/validation-criteria", + "title": "Validation Criteria", + "kind": "official eligibility", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "300K organic uniques/30 days", + "US/UK/CA", + "domain and content rules" + ] + }, + { + "url": "https://us.themoneytizer.com/publisherguide", + "title": "Publisher guide", + "kind": "official onboarding", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "registration, review, tags, consent" + ] + }, + { + "url": "https://www.themoneytizer.com/cgu", + "title": "Terms", + "kind": "official contract", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "share and euro threshold" + ] + }, + { + "url": "https://us.themoneytizer.com/category/payments-invoices", + "title": "US payment FAQ", + "kind": "official help", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "US minimum and timing" + ] + }, + { + "url": "https://us.themoneytizer.com/", + "title": "US publisher sign-up page", + "kind": "official application", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "publisher account registration and website submission entry point" + ] + } + ] + }, + { + "slug": "venatus", + "checkedAt": "2026-10-22", + "productType": "Managed monetization/direct-demand for gaming, sports, and entertainment publishers", + "applicationUrl": "https://www.venatus.com/contact/for-publishers", + "directoryPatch": { + "checkedAt": "2026-10-22", + "keyNumbers": [], + "joining": [ + { + "label": "Traffic", + "value": "Sales-led publisher review; no numeric threshold published", + "sourceUrl": "https://www.venatus.com/contact/for-publishers" + }, + { + "label": "Visitor location", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Content", + "value": "Must pass a human audit; prohibited content includes hate speech, adult, illegal filesharing/downloads/streaming or hacking, and promotion of drugs/tobacco/firearms", + "sourceUrl": "https://www.venatus.com/brand-safety" + }, + { + "label": "Google standing", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Must connect", + "value": "Not public", + "sourceUrl": null + }, + { + "label": "Approval time", + "value": "Not public", + "sourceUrl": null + } + ], + "revenueShare": null, + "paymentTerms": null, + "paymentThreshold": null, + "paymentMethods": [], + "sources": [ + { + "label": "Publisher brand-safety standards", + "url": "https://www.venatus.com/brand-safety" + }, + { + "label": "Publisher contact page", + "url": "https://www.venatus.com/contact/for-publishers" + }, + { + "label": "Venatus company site", + "url": "https://www.venatus.com/" + }, + { + "label": "Venatus company LinkedIn", + "url": "https://www.linkedin.com/company/we-are-venatus" + } + ] + }, + "fit": { + "publisherTypes": [ + "gaming site and game-platform publishers", + "sports publishers", + "entertainment publishers" + ], + "nichesStrong": [ + "gaming", + "HTML5 games", + "sports", + "entertainment" + ], + "nichesWeak": [ + "sites with prohibited adult/illegal/hate content" + ], + "geographies": [ + "No country-share threshold found" + ], + "role": "primary", + "entryPositioning": "Sales-led and niche-focused with human content audit; no public traffic or revenue minimum.", + "compatibilityNotes": [ + "Can replace a managed display partner or provide selected gaming/video demand.", + "Ask about server-side setup, country demand, video fill, and exclusivity.", + "Do not transfer other vendor metrics from comparison threads." + ] + }, + "officialRequirements": [ + { + "metric": "traffic/revenue/age/geography", + "comparator": "no numeric threshold published", + "amount": null, + "unit": "not stated", + "period": null, + "scope": "publisher property", + "program": "Venatus", + "sourceUrl": "https://www.venatus.com/contact/for-publishers" + }, + { + "metric": "publisher content", + "comparator": "must pass human audit and terms", + "amount": null, + "unit": "quality criteria", + "period": null, + "scope": "website or app", + "program": "Venatus", + "sourceUrl": "https://www.venatus.com/brand-safety" + } + ], + "observations": [ + { + "sourceUrl": "https://www.reddit.com/r/adops/comments/1sza527/venatus_vs_publisher_collective/", + "publishedAt": "2026-05 approx.", + "site": "anonymous gaming publisher commenter", + "niche": "gaming", + "traffic": { + "value": null, + "metric": "not disclosed", + "period": null + }, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "commenter said they moved from Publisher Collective to Venatus in Jan 2026; no results", + "limits": "Original poster’s 10M impressions and Tier 1 share referred to another Playwire site." + }, + { + "sourceUrl": "https://www.trustpilot.com/review/www.venatus.com", + "publishedAt": "2025-05-01", + "site": "anonymous gaming publisher", + "niche": "gaming", + "traffic": { + "value": null, + "metric": "not disclosed", + "period": null + }, + "adRevenueMonthlyUsd": null, + "countries": [], + "decision": "after four months, reviewer said RPM was about 3x prior AdSense", + "limits": "Trustpilot sample is sparse; no pageviews, geography or revenue amount." + } + ], + "inference": { + "trafficRange": null, + "revenueRange": null, + "practicalFit": "Potentially strong for established gaming, sports, or entertainment publishers needing niche direct demand/managed ad ops. Not enough evidence to call it a beginner option.", + "currentNetworkSignals": [ + "Existing gaming partner is only a soft comparison.", + "Compare video fill, server-side setup, and terms for current Playwire/PC/Nitro publishers." + ], + "geographyPreference": "No public preference; use actual country-level demand in sales discussion.", + "agePreference": "No public age rule.", + "confidence": "low", + "rationale": "Official pages give niche and brand-safety criteria but no admission floor; anecdotes are low-detail and mixed.", + "supportingSourceUrls": [ + "https://www.venatus.com/brand-safety", + "https://www.venatus.com/contact/for-publishers", + "https://www.reddit.com/r/adops/comments/1sza527/venatus_vs_publisher_collective/", + "https://www.trustpilot.com/review/www.venatus.com" + ], + "gaps": [ + "No numeric threshold or payment terms.", + "No successful entry example with traffic and countries.", + "Positive Trustpilot report lacks scale." + ] + }, + "sources": [ + { + "url": "https://www.venatus.com/contact/for-publishers", + "title": "Publisher contact", + "kind": "official contact", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "sales-led route" + ] + }, + { + "url": "https://www.venatus.com/brand-safety", + "title": "Brand Safety", + "kind": "official policy", + "publishedAt": null, + "checkedAt": "2026-10-22", + "claims": [ + "human audit", + "prohibited content" + ] + }, + { + "url": "https://www.reddit.com/r/adops/comments/1sza527/venatus_vs_publisher_collective/", + "title": "Publisher comparison", + "kind": "publisher firsthand", + "publishedAt": "2026-05 approx.", + "checkedAt": "2026-10-22", + "claims": [ + "gaming", + "migration mention, no result" + ] + }, + { + "url": "https://www.trustpilot.com/review/www.venatus.com", + "title": "Publisher review", + "kind": "publisher-submitted", + "publishedAt": "2025-05-01", + "checkedAt": "2026-10-22", + "claims": [ + "four months", + "3x AdSense RPM claim", + "no scale" + ] + } + ] + } +] diff --git a/content_docs/ad-networks/research/adapex.md b/content_docs/ad-networks/research/adapex.md index 3b15d029..33677150 100644 --- a/content_docs/ad-networks/research/adapex.md +++ b/content_docs/ad-networks/research/adapex.md @@ -1,29 +1,83 @@ -# Adapex +# adapex: recommendation research -Checked 2026-10-16. +Checked: 2026-10-22 -## Joining +## Product and application -- Traffic: Not public. The reviewed official pages do not state this rule. Source checked: https://adapex.io/faqs/. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://adapex.io/faqs/. Read 2026-10-16. -- Content: Not public. The reviewed official pages do not state this rule. Source checked: https://adapex.io/faqs/. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://adapex.io/faqs/. Read 2026-10-16. -- Must connect: Google Ad Manager via MCM. Source: https://adapex.io/faqs/. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://adapex.io/faqs/. Read 2026-10-16. +- Product: Managed yield optimization and ad-stack infrastructure. +- Application or contact route: [https://adapex.io/get-in-touch/](https://adapex.io/get-in-touch/). +- Recommendation role: **infrastructure**. Contact-led managed yield service. It targets mid-sized publishers, asks for monthly revenue, monthly pageviews and US traffic share, but publishes no numeric floor. -## Pay +## Official facts -- The FAQ says publishers are paid Net 60. Share rate, minimum payment, payment methods, and payout currency are not public. (Source: https://adapex.io/faqs/, read 2026-10-16.) +Facts below apply to the named program. Missing numeric amounts mean the source did not publish a number. -## Rules +- **Traffic — no numeric floor published**; period: not stated; scope: web publishers; program: Managed service. Source: [https://adapex.io/faqs/](https://adapex.io/faqs/). Note: FAQ uses substantial-traffic language. +- **Ad server — requires**; period: during service; scope: managed publishers; program: Managed service. Source: [https://adapex.io/faqs/](https://adapex.io/faqs/). +- **Content — must comply**; period: ongoing; scope: site content; program: Managed service. Source: [https://adapex.io/faqs/](https://adapex.io/faqs/). +- **Application form — asks for**; period: at application; scope: publisher site; program: Managed service. Source: [https://adapex.io/get-in-touch/](https://adapex.io/get-in-touch/). Note: Intake fields are not eligibility thresholds. -- No long-term contract is required. A longer contract may provide preferential shares or features. The public FAQ does not state exclusivity or notice length. (Source: https://adapex.io/faqs/, read 2026-10-16.) -- Publishers can block categories, advertisers, and domains and can set category controls and floors. (Source: https://adapex.io/faqs/, read 2026-10-16.) +## Publisher-reported observations -## Service +Individual reports, not acceptance-rate evidence or revenue forecasts. -- A publisher dashboard reports revenue and traffic near real time, including geography and device. The FAQ says publishers retain their GAM account. (Source: https://adapex.io/faqs/, read 2026-10-16.) +- **Date not stated — Unidentified publisher** (Not stated). Thread asked whether publishers were making money with Adapex; no verifiable acceptance or earnings example emerged. Limits: Question only; no site, traffic, revenue or outcome. Source: [https://www.reddit.com/r/adops/comments/yvtwkr](https://www.reddit.com/r/adops/comments/yvtwkr). -## Logo +## Editorial inference -Logo source: https://adapex.io/wp-content/uploads/2025/12/Logo-adapex-teal-1.svg (read 2026-10-16) +### Practical fit + +Shortlist when an established publisher wants an optimization partner that works around its current stack. A beginner without GAM has no confirmed application path. + +### Estimated range and confidence + +- Traffic range: not estimated; available figures are absent or not comparable enough to support a practical band. +- Revenue range: not estimated. + +- Geography: Publisher contact form asks for USA traffic share; no target percentage is published. +- Site age: No public site-age minimum found. +- Confidence: **low**. Current FAQ gives mid-sized publisher positioning, MCM, compatibility and payment terms; contact form requests monthly revenue, monthly PV and US traffic share without publishing thresholds. + +### Current-network compatibility + +- Existing AdSense, AdX or Prebid can be integrated; this is compatibility evidence, not a guarantee of selection. +- Current FAQ says it integrates with existing AdSense, AdX and Prebid and does not force publishers to remove partners. +- GAM via MCM is required; flexible short-term testing is available. + +## Directory-ready corrections and additions + +Proposed complete AdNetworkFacts record, excluding minTraffic. Keep published values with their dates and qualifications. + +### Key numbers + +- **Pay day:** Net 60 — Monthly net terms; no public threshold or share. Source: [https://adapex.io/faqs/](https://adapex.io/faqs/). + +### Joining and payment + +- **Application inputs:** Publisher form asks monthly revenue, monthly pageviews, and USA traffic share — These are intake fields, not a published cutoff. Source: [https://adapex.io/get-in-touch/](https://adapex.io/get-in-touch/). +- **Traffic:** No numeric minimum published; positioned for mid-sized publishers. Source: [https://adapex.io/faqs/](https://adapex.io/faqs/). +- **Must connect:** Google Ad Manager through MCM — Adapex says it works with existing AdSense, AdX and Prebid. Source: [https://adapex.io/faqs/](https://adapex.io/faqs/). +- **Contract:** No long-term contract required to start; longer terms can be offered. Source: [https://adapex.io/faqs/](https://adapex.io/faqs/). +- Revenue share: Not public. +- Payment terms: Net 60; paid monthly through the publisher's established method. +- Payment threshold: Not public. +- Payment methods: Not public. + +## Unresolved conflicts and gaps + +- No numeric traffic, revenue, country-share or site-age gate published. +- No reliable independent acceptance or revenue case found; the located forum thread was a question. + +## Research attempts and sources + +Attempts are stated explicitly so missing evidence is not mistaken for an unavailable or reviewed source. + +- Checked current official FAQ and contact route. +- Searched publisher experience and earnings on Reddit/ad-ops forums; found a question only, without an identifiable site or outcome. + +### Sources checked + +- [Publisher FAQ](https://adapex.io/faqs/) — official; checked 2026-10-22. Supports: mid-sized positioning; GAM/MCM and compatibility; Net60. +- [Contact route](https://adapex.io/get-in-touch/) — official; checked 2026-10-22. Supports: application route. +- [Adapex publisher question](https://www.reddit.com/r/adops/comments/yvtwkr) — publisher_forum; checked 2026-10-22. Supports: no verified application outcome. +- [Publisher contact form](https://adapex.io/get-in-touch/) — official; checked 2026-10-22. Supports: collects monthly revenue, monthly pageviews and US traffic percentage as application inputs; no listed cutoff. diff --git a/content_docs/ad-networks/research/aditude.md b/content_docs/ad-networks/research/aditude.md index 3af77742..4f4290a9 100644 --- a/content_docs/ad-networks/research/aditude.md +++ b/content_docs/ad-networks/research/aditude.md @@ -1,28 +1,82 @@ -# Aditude +# aditude: recommendation research -Checked 2026-10-16. +Checked: 2026-10-22 -## Joining +## Product and application -- Traffic: Not public. The reviewed official pages do not state this rule. Source checked: https://www.aditude.com/blog/the-5-questions-every-publisher-should-ask-their-monetization-partner. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://www.aditude.com/blog/the-5-questions-every-publisher-should-ask-their-monetization-partner. Read 2026-10-16. -- Content: Not public. The reviewed official pages do not state this rule. Source checked: https://www.aditude.com/blog/the-5-questions-every-publisher-should-ask-their-monetization-partner. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://www.aditude.com/blog/the-5-questions-every-publisher-should-ask-their-monetization-partner. Read 2026-10-16. -- Must connect: Not public. The reviewed official pages do not state this rule. Source checked: https://www.aditude.com/blog/the-5-questions-every-publisher-should-ask-their-monetization-partner. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://www.aditude.com/blog/the-5-questions-every-publisher-should-ask-their-monetization-partner. Read 2026-10-16. +- Product: Publisher ad-tech platform and managed monetization support. +- Application or contact route: [https://www.aditude.com/contact](https://www.aditude.com/contact). +- Recommendation role: **infrastructure**. Demo-led platform; customer examples suggest enterprise fit, but no public traffic gate. -## Pay +## Official facts -- Publisher revenue share, payment timing, payment minimum, methods, and currency are not public. (Source: https://www.aditude.com/blog/the-5-questions-every-publisher-should-ask-their-monetization-partner, read 2026-10-16.) +Facts below apply to the named program. Missing numeric amounts mean the source did not publish a number. -## Rules +- **Application — contact-led demo**; period: not stated; scope: publisher businesses; program: Publisher platform. Source: [https://www.aditude.com/](https://www.aditude.com/). +- **Traffic — not published**; period: not stated; scope: publisher sites; program: Publisher platform. Source: [https://www.aditude.com/case-studies](https://www.aditude.com/case-studies). +- **Product scope — supports**; period: ongoing; scope: publisher inventory; program: Publisher platform. Source: [https://www.aditude.com/](https://www.aditude.com/). -- Publisher exclusivity, ad placement control, content restrictions, term, and notice are not public. The public site terms cover website use, not a publisher service agreement. (Source: https://www.aditude.com/policies/terms, read 2026-10-16.) +## Publisher-reported observations -## Service +Individual reports, not acceptance-rate evidence or revenue forecasts. -- Aditude publishes publisher ad-technology guidance, but publisher dashboard, reporting, and support terms are not public. (Source: https://www.aditude.com/blog/the-5-questions-every-publisher-should-ask-their-monetization-partner, read 2026-10-16.) +- **Date not stated — Unnamed visual-design web app** (Free visual-design app). Traffic: 1100000 monthly GA users (month). Poster said they started with Aditude and later tested other partners after reliability issues with ad placements/integration. Limits: Anonymous; no revenue or admission detail. Source: [https://www.reddit.com/r/adops/comments/1ozpww8](https://www.reddit.com/r/adops/comments/1ozpww8). +- **Date not stated — Dexerto** (Gaming/esports media). Vendor case reports a 15% revenue lift and 10% more ads per session against prior setup. Limits: Vendor case, no traffic/revenue baseline; comparison windows differ. Source: [https://www.aditude.com/case-studies/dexerto](https://www.aditude.com/case-studies/dexerto). -## Logo +## Editorial inference -Logo source: https://framerusercontent.com/images/2752nkfEyOmXFCfrhZ7IhHSCZuc.png (read 2026-10-16) +### Practical fit + +Consider for sizeable publishers with ad-ops/product/engineering needs and the capacity to evaluate a demo. Not a default for a new blog. + +### Estimated range and confidence + +- Traffic range: not estimated; available figures are absent or not comparable enough to support a practical band. +- Revenue range: not estimated. + +- Geography: No public country mix found. +- Site age: No public site-age minimum found. +- Confidence: **low**. Case studies show customer types, not a floor; one independent operator describes scale and integration concerns, not eligibility. + +### Current-network compatibility + +- Existing managed ad-tech peers are not proof of Aditude acceptance. +- Public materials do not settle exclusivity or network coexistence; ask during sales review. + +## Directory-ready corrections and additions + +Proposed complete AdNetworkFacts record, excluding minTraffic. Keep published values with their dates and qualifications. + +### Key numbers + +- None published; retain an empty key-number list. + +### Joining and payment + +- **Application:** Book a demo/contact sales; no self-serve gate found — Web/app platform with tailored service. Source: [https://www.aditude.com/contact](https://www.aditude.com/contact). +- **Traffic:** No public numeric requirement found. Source: [https://www.aditude.com/case-studies](https://www.aditude.com/case-studies). +- **Publisher types:** Case studies cover media, gaming, audio and apps. Source: [https://www.aditude.com/case-studies](https://www.aditude.com/case-studies). +- Revenue share: Not public. +- Payment terms: Not public. +- Payment threshold: Not public. +- Payment methods: Not public. + +## Unresolved conflicts and gaps + +- No public traffic, revenue, age, geography, payment or share rules. +- No named first-person acceptance story with application metrics. + +## Research attempts and sources + +Attempts are stated explicitly so missing evidence is not mistaken for an unavailable or reviewed source. + +- Reviewed current platform, case studies and demo route. +- Searched publisher forums; found one anonymous operator account at 1.1m monthly GA users, but no application decision or earnings. + +### Sources checked + +- [Publisher ad-tech platform](https://www.aditude.com/) — official; checked 2026-10-22. Supports: web/app platform; contact route. +- [Case studies](https://www.aditude.com/case-studies) — official; checked 2026-10-22. Supports: publisher categories. +- [Dexerto case](https://www.aditude.com/case-studies/dexerto) — vendor_case_study; checked 2026-10-22. Supports: reported lift; no entry data. +- [Visual design app ad discussion](https://www.reddit.com/r/adops/comments/1ozpww8) — publisher_forum; checked 2026-10-22. Supports: 1.1m monthly GA users; reliability concerns. +- [Publisher contact](https://www.aditude.com/contact) — official; checked 2026-10-22. Supports: sales-led contact route. diff --git a/content_docs/ad-networks/research/adnimation.md b/content_docs/ad-networks/research/adnimation.md index babe7792..e7319699 100644 --- a/content_docs/ad-networks/research/adnimation.md +++ b/content_docs/ad-networks/research/adnimation.md @@ -1,29 +1,87 @@ -# Adnimation +# adnimation: recommendation research -Checked 2026-10-16. +Checked: 2026-10-22 -## Joining +## Product and application -- Traffic: Substantial, no figure stated. Note: MAP is a separate program with no minimum. Sources: https://www.adnimation.com/faqs/ and https://www.adnimation.com/map/. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://www.adnimation.com/faqs/. Read 2026-10-16. -- Content: No gambling, pornography, or drugs. Source: https://www.adnimation.com/faqs/. Read 2026-10-16. -- Google standing: Follow Google policy guidelines. Source: https://www.adnimation.com/faqs/. Read 2026-10-16. -- Must connect: Not public. The reviewed official pages do not state this rule. Source checked: https://www.adnimation.com/faqs/. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://www.adnimation.com/faqs/. Read 2026-10-16. +- Product: Managed ad monetization plus a separate self-serve MAP program. +- Application or contact route: [https://www.adnimation.com/get-started/](https://www.adnimation.com/get-started/). +- Recommendation role: **infrastructure**. Separate paths: standard service asks for substantial traffic; MAP has no PV floor but manually reviews all sites. -## Pay +## Official facts -- The standard FAQ describes a revenue-share model but does not publish the rate. It says monthly direct-bank payment on Net 35 terms. It may accommodate PayPal. A minimum and currency are not public. (Source: https://www.adnimation.com/faqs/, read 2026-10-16.) -- Separate MAP terms list Net 65 and a $400 minimum. Do not apply those MAP terms to the standard program. (Source: https://www.adnimation.com/map-terms-conditions/, read 2026-10-16.) +Facts below apply to the named program. Missing numeric amounts mean the source did not publish a number. -## Rules +- **Traffic — substantial; no number**; period: not stated; scope: standard managed sites; program: Standard. Source: [https://www.adnimation.com/faqs/](https://www.adnimation.com/faqs/). +- **Traffic — no minimum**: 0 pageviews; period: not stated; scope: all site sizes subject to review; program: MAP. Source: [https://www.adnimation.com/map/](https://www.adnimation.com/map/). +- **Content — must exclude**; period: ongoing; scope: site/app/CTV; program: Standard. Source: [https://www.adnimation.com/faqs/](https://www.adnimation.com/faqs/). -- The standard FAQ says there is no lock-in contract, but a notice is required; notice length is not stated. Publishers can request pages and customize placements. No public exclusivity rule is stated. (Source: https://www.adnimation.com/faqs/, read 2026-10-16.) +## Publisher-reported observations -## Service +Individual reports, not acceptance-rate evidence or revenue forecasts. -- The standard service includes a dashboard with gross and net earnings. Formats include display, header bidding, video, CTV/OTT, mobile apps, lazy loading, refresh, and native/recommendation ads. Support channels include email, phone, WhatsApp, Telegram, and Skype; the FAQ states an average response under two hours. (Source: https://www.adnimation.com/faqs/, read 2026-10-16.) +- **Date not stated — Aggregate customer base** (Original-content sites; examples include conservative news, automotive and Mandarin publishers). Traffic: 1000000 monthly visitors (lower end of quoted customer sweet spot). Countries: United States. Co-founder described 1–20m monthly visitors as sweet spot and 65% of customers in US. Limits: Company interview circa 2022; positioning, not admission floor. Source: [https://www.adnimation.com/adnimation-co-founder-talks-plans-for-growth-with-mergermarket/](https://www.adnimation.com/adnimation-co-founder-talks-plans-for-growth-with-mergermarket/). +- **Date not stated — Unnamed conservative news site** (Conservative news). Traffic: 1000000 monthly users (site reached scale before engagement). Company case says the site exceeded 1m monthly users before monetization engagement. Limits: Vendor case, not an entrant threshold. Source: [https://www.adnimation.com/case-study/](https://www.adnimation.com/case-study/). -## Logo +## Editorial inference -Logo source: https://www.adnimation.com/wp-content/uploads/Adnimation-logo-black-550px.png (read 2026-10-16) +### Practical fit + +Standard service is plausible for established sites around the historical 1–20m visitor sweet spot. MAP is a lower-volume route with no PV minimum, subject to review. + +### Estimated range and confidence + +- Traffic reference: **1,000,000–20,000,000 visitors per month**; confidence: low. This is not an admission guarantee. + - Historical vendor interview sweet spot, not admission range. + - Basis: [https://www.adnimation.com/adnimation-co-founder-talks-plans-for-growth-with-mergermarket/](https://www.adnimation.com/adnimation-co-founder-talks-plans-for-growth-with-mergermarket/). +- Revenue range: not estimated. + +- Geography: Global; historical interview says US publishers were a majority, including foreign-language US audiences. +- Site age: No site-age minimum found. +- Confidence: **low**. Official FAQ confirms substantial traffic and MAP without PV minimum; the 1–20m band is dated company positioning only. + +### Current-network compatibility + +- GAM/header-bidding experience can support implementation but does not prove acceptance. +- Standard service allows direct campaigns to continue; confirm other-network exclusivity. +- MAP payment terms are separate. + +## Directory-ready corrections and additions + +Proposed complete AdNetworkFacts record, excluding minTraffic. Keep published values with their dates and qualifications. + +### Key numbers + +- **Pay day:** Net 35 — Standard managed service; MAP has separate terms. Source: [https://www.adnimation.com/faqs/](https://www.adnimation.com/faqs/). + +### Joining and payment + +- **Standard traffic:** Substantial; no official number — CEO described 1–20m monthly visitors as a historical sweet spot, not a cutoff. Source: [https://www.adnimation.com/adnimation-co-founder-talks-plans-for-growth-with-mergermarket/](https://www.adnimation.com/adnimation-co-founder-talks-plans-for-growth-with-mergermarket/). +- **MAP traffic:** No PV minimum; all sites reviewed. Source: [https://www.adnimation.com/map/](https://www.adnimation.com/map/). +- **Content:** No gambling, pornography, drugs or similar content. Source: [https://www.adnimation.com/faqs/](https://www.adnimation.com/faqs/). +- **Payment methods:** US ACH; international wire; PayPal by arrangement. Source: [https://www.adnimation.com/faqs/](https://www.adnimation.com/faqs/). +- Revenue share: Revenue-share model; percentage not public. +- Payment terms: Net 35 after month end. +- Payment threshold: Not public. +- Payment methods: ACH (US), International wire, PayPal by arrangement. + +## Unresolved conflicts and gaps + +- No current standard-service threshold or country-share rule. +- No independent first-person application case with dated metrics found. +- Verify MAP-specific payment terms separately. + +## Research attempts and sources + +Attempts are stated explicitly so missing evidence is not mistaken for an unavailable or reviewed source. + +- Checked current standard FAQ and MAP page. +- Searched for independent first-person application stories; none qualified. +- Used the co-founder interview to replace the vague word substantial with dated positioning only. + +### Sources checked + +- [Publisher FAQ](https://www.adnimation.com/faqs/) — official; checked 2026-10-22. Supports: substantial traffic; content exclusions; Net+35; revenue share. +- [MAP program](https://www.adnimation.com/map/) — official; checked 2026-10-22. Supports: no PV floor; manual review. +- [Co-founder interview](https://www.adnimation.com/adnimation-co-founder-talks-plans-for-growth-with-mergermarket/) — company_interview; checked 2026-10-22. Supports: 1–20m monthly visitors sweet spot; 65% US mix; not admission rule. +- [Publisher case study](https://www.adnimation.com/case-study/) — vendor_case_study; checked 2026-10-22. Supports: conservative-news niche and scale. diff --git a/content_docs/ad-networks/research/adpushup.md b/content_docs/ad-networks/research/adpushup.md index 11672745..1454f965 100644 --- a/content_docs/ad-networks/research/adpushup.md +++ b/content_docs/ad-networks/research/adpushup.md @@ -1,29 +1,86 @@ -# AdPushup +# adpushup: recommendation research -Checked 2026-10-16. +Checked: 2026-10-22 -## Joining +## Product and application -- Traffic: Not public. The reviewed official pages do not state this rule. Source checked: https://www.adpushup.com/publisher/get-started/. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://www.adpushup.com/publisher/get-started/. Read 2026-10-16. -- Content: Not public. The reviewed official pages do not state this rule. Source checked: https://www.adpushup.com/publisher/get-started/. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://www.adpushup.com/publisher/get-started/. Read 2026-10-16. -- Must connect: Not public. The reviewed official pages do not state this rule. Source checked: https://www.adpushup.com/publisher/get-started/. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://www.adpushup.com/publisher/get-started/. Read 2026-10-16. +- Product: Managed ad-revenue optimization and header-bidding platform. +- Application or contact route: [https://www.adpushup.com/publisher/get-started/](https://www.adpushup.com/publisher/get-started/). +- Recommendation role: **infrastructure**. Application-led optimization service. A vendor article mentions $3k/month revenue, but current onboarding does not verify a minimum. -## Pay +## Official facts -- Older public terms, revised in 2018, set a default 20% service fee, a $50 payment minimum, and payment within 45 days after the month. They may not reflect current publisher agreements. The current signed agreement should control. (Source: https://www.adpushup.com/wp-content/uploads/2020/02/AdPushup-Terms-of-Service-v2.0-WebSite-Version1.pdf, read 2026-10-16.) -- Payment methods and currency are not stated in those terms. (Source: https://www.adpushup.com/wp-content/uploads/2020/02/AdPushup-Terms-of-Service-v2.0-WebSite-Version1.pdf, read 2026-10-16.) +Facts below apply to the named program. Missing numeric amounts mean the source did not publish a number. -## Rules +- **Traffic — not confirmed by current onboarding**; period: not stated; scope: publisher sites; program: Publisher service. Source: [https://www.adpushup.com/publisher/get-started/](https://www.adpushup.com/publisher/get-started/). +- **Ad revenue — vendor article mentions**: 3,000 USD; period: month; scope: small publisher discussion; program: Vendor article. Source: [https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/](https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/). Note: Not confirmed as current hard minimum. +- **Content — must not contain**; period: ongoing; scope: approved sites; program: Publisher terms. Source: [https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf](https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf). -- The older terms prohibit invalid traffic and other policy violations. Current exclusivity, placement control, content rules, term, and notice were not confirmed in current public publisher materials. (Source: https://www.adpushup.com/wp-content/uploads/2020/02/AdPushup-Terms-of-Service-v2.0-WebSite-Version1.pdf, read 2026-10-16.) +## Publisher-reported observations -## Service +Individual reports, not acceptance-rate evidence or revenue forecasts. -- The publisher page describes a customized dashboard, real-time reporting, placement and floor controls, and publisher support. (Source: https://www.adpushup.com/publisher/get-started/, read 2026-10-16.) +- No reliable dated publisher admission or migration account with useful traffic context was located. See search attempts below. -## Logo +## Editorial inference -Logo source: https://www.adpushup.com/wp-content/uploads/2025/06/Adpushup-by-Geniee-Logo.webp (read 2026-10-16) +### Practical fit + +Compare when a publisher already earns material display revenue and wants managed testing/header bidding. Treat $3k/month only as a vendor-published soft signal. + +### Estimated range and confidence + +- Traffic range: not estimated; available figures are absent or not comparable enough to support a practical band. +- Revenue reference: **3,000–3,000 USD ad revenue per month**; confidence: low. + - One vendor article; current onboarding does not confirm minimum. + - Basis: [https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/](https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/). + +- Geography: No public country or audience mix. +- Site age: No public age rule. +- Confidence: **low**. Current onboarding is sales-led; public terms are revised 2021 and the only revenue signal is a vendor article. + +### Current-network compatibility + +- Existing ad partners are context, not proof of entry. +- Designed to optimize existing demand; check current agreement for same-slot competition/exclusivity. + +## Directory-ready corrections and additions + +Proposed complete AdNetworkFacts record, excluding minTraffic. Keep published values with their dates and qualifications. + +### Key numbers + +- **Vendor-published revenue signal:** $3,000/month — Soft signal in vendor small-publisher article; current onboarding does not confirm it as a hard gate. Source: [https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/](https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/). +- **Payment minimum:** $50 — Publisher terms last revised April 20, 2021; verify current offer. Source: [https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf](https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf). +- **Pay day:** Net 45 — 2021-revised terms; verify current offer. Source: [https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf](https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf). + +### Joining and payment + +- **Traffic:** No confirmed current minimum — Vendor article says no PV minimum; onboarding page is silent. Source: [https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/](https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/). +- **Revenue:** About $3k/month is cited in vendor eligibility article — Not confirmed by current application route. Source: [https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/](https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/). +- **Application:** Submit site for review and install approved code. Source: [https://www.adpushup.com/publisher/get-started/](https://www.adpushup.com/publisher/get-started/). +- Revenue share: Separate publisher agreement sets share; not public. +- Payment terms: Net 45 under 2021 terms. +- Payment threshold: $50 under 2021 terms. +- Payment methods: Direct deposit, Wire transfer, PayPal. + +## Unresolved conflicts and gaps + +- No reliable dated first-person application case found. +- Payment terms are dated April 2021; verify current offer. +- No current traffic, geography or revenue-share rule. + +## Research attempts and sources + +Attempts are stated explicitly so missing evidence is not mistaken for an unavailable or reviewed source. + +- Reviewed current publisher start route and public terms revised 2021. +- Searched Reddit/ad-ops for first-person entry outcomes; no qualified example found. +- Checked independent sellers.json analysis but did not treat roster size as measured traffic. + +### Sources checked + +- [Publisher onboarding](https://www.adpushup.com/publisher/get-started/) — official; checked 2026-10-22. Supports: application route; managed optimization. +- [Small-publisher article](https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/) — vendor_article; checked 2026-10-22. Supports: $3,000/month signal and no PV minimum; not confirmed by current onboarding. +- [Publisher terms](https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf) — official_terms, published 2021-04-20; checked 2026-10-22. Supports: minimum, payout and content terms; separate share agreement. +- [Publisher roster analysis](https://adxdesk.com/blog/adpushup-review/) — independent_analysis; checked 2026-10-22. Supports: sellers.json footprint, not visits or acceptance. diff --git a/content_docs/ad-networks/research/amazon-publisher-services.md b/content_docs/ad-networks/research/amazon-publisher-services.md index 5e5e6640..10bc7fd0 100644 --- a/content_docs/ad-networks/research/amazon-publisher-services.md +++ b/content_docs/ad-networks/research/amazon-publisher-services.md @@ -1,28 +1,84 @@ -# Amazon Publisher Services +# amazon-publisher-services: recommendation research -Checked 2026-10-16. +Checked: 2026-10-22 -## Joining +## Product and application -- Traffic: Not public. The reviewed official pages do not state this rule. Source checked: https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf. Read 2026-10-16. -- Visitor location: Worldwide. Note: For Unified Ad Marketplace only. Source: https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf. Read 2026-10-16. -- Content: Not public. The reviewed official pages do not state this rule. Source checked: https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf. Read 2026-10-16. -- Must connect: Google Ad Manager. Note: For Unified Ad Marketplace only. Source: https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf. Read 2026-10-16. +- Product: Invitation-only server-side header-bidding marketplace (UAM). +- Application or contact route: [https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html](https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html). +- Recommendation role: **supplemental**. Invitation-only demand layer; not an open beginner network. -## Pay +## Official facts -- UAM collects a 10% transaction fee from SSP bid prices before the first-price auction. It consolidates revenue into one monthly payment on Net 60 terms, with a $5 threshold. The payout method and currency are not stated in the PDF. (Source: https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf, read 2026-10-16.) +Facts below apply to the named program. Missing numeric amounts mean the source did not publish a number. -## Rules +- **Invitation — required**; period: before onboarding; scope: approved site; program: UAM. Source: [https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf](https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf). +- **Publisher relationship — must directly/exclusively represent**; period: ongoing; scope: publisher; program: UAM. Source: [https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf](https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf). +- **Ad server — requires**; period: ongoing; scope: web publisher; program: UAM. Source: [https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf](https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf). +- **Traffic — not published**; period: not stated; scope: publisher site; program: UAM. Source: [https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html](https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html). -- The UAM PDF says UAM can run alongside header bidding and its JavaScript can be placed outside wrappers. Public UAM exclusivity, content rules, contract length, and notice terms are not stated. (Source: https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf, read 2026-10-16.) +## Publisher-reported observations -## Service +Individual reports, not acceptance-rate evidence or revenue forecasts. -- Public publisher-facing dashboard, support, and reporting details were not found in the reviewed UAM PDF. (Source: https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf, read 2026-10-16.) +- **2022 — Unidentified publisher** (Not stated). Traffic: 45000000 monthly US pageviews (month). Countries: United States. Reported applying for UAM invitation and no reply after about three weeks. Limits: Anonymous single applicant, no final outcome; not an entry floor. Source: [https://www.reddit.com/r/adops/comments/v0ec6t](https://www.reddit.com/r/adops/comments/v0ec6t). +- **2025 — Unidentified publisher** (Not stated). Reported using TAM/UAM with good results. Limits: No traffic, revenue or application details. Source: [https://www.reddit.com/r/adops/comments/1mss9ei](https://www.reddit.com/r/adops/comments/1mss9ei). -## Logo +## Editorial inference -Logo source: https://aps.amazon.com/aps/static-content/uploads/2017/12/cropped-favicon-1-180x180.png (read 2026-10-16) +### Practical fit + +Shortlist only after checking invitation, GAM readiness and direct representation. Most small publishers cannot act on it immediately. + +### Estimated range and confidence + +- Traffic range: not estimated; available figures are absent or not comparable enough to support a practical band. +- Revenue range: not estimated. + +- Geography: Worldwide, with country-dependent demand. +- Site age: No public age rule found. +- Confidence: **medium**. Official terms establish invitation, GAM and compatibility but no traffic floor; one 45m-US-PV applicant waited without response. + +### Current-network compatibility + +- Compatible with other wrappers; existing network use does not prove an invite. +- Official UAM FAQ allows use beside other header-bidding wrappers. + +## Directory-ready corrections and additions + +Proposed complete AdNetworkFacts record, excluding minTraffic. Keep published values with their dates and qualifications. + +### Key numbers + +- **UAM fee:** 10% — Stated in 2023 FAQ; verify because current page does not repeat the rate. Source: [https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf](https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf). +- **Payment minimum:** $5 USD — Current UAM product page confirms. Source: [https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html](https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html). +- **Pay day:** Net 60 — Current UAM product page confirms. Source: [https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html](https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html). + +### Joining and payment + +- **Application:** Invitation only; approved invite code and site. Source: [https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html](https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html). +- **Must connect:** Google Ad Manager; publisher directly or exclusively represents the site. Source: [https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html](https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html). +- **Geography:** Worldwide availability; bidder demand varies by country. Source: [https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html](https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html). +- Revenue share: Not public. +- Payment terms: Net 60. +- Payment threshold: $5 USD. +- Payment methods: Not public. + +## Unresolved conflicts and gaps + +- No verified accepted publisher example with niche and traffic. +- Fee source is from 2023 and should be confirmed in current agreement. + +## Research attempts and sources + +Attempts are stated explicitly so missing evidence is not mistaken for an unavailable or reviewed source. + +- Checked current APS page and 2023 official UAM FAQ. +- Searched firsthand application/results; found one large applicant waiting and one unquantified user report. + +### Sources checked + +- [Current UAM page](https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html) — official; checked 2026-10-22. Supports: invite; GAM; global availability; Net60 and $5. +- [UAM FAQ](https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf) — official_document, published 2023-01; checked 2026-10-22. Supports: 10% transaction fee; invitation/GAM/compatibility. +- [UAM applicant report](https://www.reddit.com/r/adops/comments/v0ec6t) — publisher_forum, published 2022; checked 2026-10-22. Supports: 45m monthly US PV; no response after about three weeks. +- [TAM/UAM use](https://www.reddit.com/r/adops/comments/1mss9ei) — publisher_forum, published 2025; checked 2026-10-22. Supports: unquantified positive use. diff --git a/content_docs/ad-networks/research/anymind-anymanager.md b/content_docs/ad-networks/research/anymind-anymanager.md index f71cf01e..1a9d95d1 100644 --- a/content_docs/ad-networks/research/anymind-anymanager.md +++ b/content_docs/ad-networks/research/anymind-anymanager.md @@ -1,28 +1,82 @@ -# AnyMind / AnyManager +# anymind-anymanager: recommendation research -Checked 2026-10-16. +Checked: 2026-10-22 -## Joining +## Product and application -- Traffic: Not public. The reviewed official pages do not state this rule. Source checked: https://anymindgroup.com/news/press-release/11388/. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://anymindgroup.com/news/press-release/11388/. Read 2026-10-16. -- Content: Not public. The reviewed official pages do not state this rule. Source checked: https://anymindgroup.com/news/press-release/11388/. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://anymindgroup.com/news/press-release/11388/. Read 2026-10-16. -- Must connect: Not public. The reviewed official pages do not state this rule. Source checked: https://anymindgroup.com/news/press-release/11388/. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://anymindgroup.com/news/press-release/11388/. Read 2026-10-16. +- Product: Publisher ad monetization, ad serving and demand aggregation for web and apps. +- Application or contact route: [https://anymindgroup.com/contact/](https://anymindgroup.com/contact/). +- Recommendation role: **infrastructure**. Contact-led commercial platform; no public traffic/revenue gate. -## Pay +## Official facts -- AnyMind says publisher and creator revenue share is based on a pre-agreed fixed percentage. It does not publish the percentage, payment timing, threshold, method, or currency. (Source: https://anymindgroup.com/ir/faq/, read 2026-10-16.) +Facts below apply to the named program. Missing numeric amounts mean the source did not publish a number. -## Rules +- **Traffic — not published**; period: not stated; scope: web/app publishers; program: AnyManager. Source: [https://anymindgroup.com/products/anymanager/](https://anymindgroup.com/products/anymanager/). +- **Revenue share — per-publisher commercial terms**; period: contract; scope: each publisher; program: AnyManager. Source: [https://anymanager.io/terms-of-service/](https://anymanager.io/terms-of-service/). +- **Integration — requires**; period: onboarding; scope: publisher property; program: AnyManager. Source: [https://anymindgroup.com/products/anymanager/](https://anymindgroup.com/products/anymanager/). -- Public exclusivity, placement-control, content-restriction, term, and notice terms were not found. (Source: https://anymindgroup.com/news/press-release/11388/, read 2026-10-16.) +## Publisher-reported observations -## Service +Individual reports, not acceptance-rate evidence or revenue forecasts. -- AnyManager offers header bidding, automated price optimization, analytics, and ad verification/viewability and brand-safety tools. Other publisher dashboard and support service levels are not public. (Sources: https://anymindgroup.com/news/press-release/11388/ and https://anymindgroup.com/news/press-release/anymanager-uac-analytics/, read 2026-10-16.) +- No reliable dated publisher admission or migration account with useful traffic context was located. See search attempts below. -## Logo +## Editorial inference -Logo source: https://anymindgroup.com/wp-content/themes/corporate/images/anymanager_logo.svg (read 2026-10-16) +### Practical fit + +Consider APAC web/app publishers seeking managed demand and analytics, especially multi-property operators. Do not rank a small global blog highly without direct qualification. + +### Estimated range and confidence + +- Traffic range: not estimated; available figures are absent or not comparable enough to support a practical band. +- Revenue range: not estimated. + +- Geography: APAC is clearest published regional emphasis; no country-level admission preference. +- Site age: No public age rule found. +- Confidence: **low**. Official material describes product scope and individually negotiated terms; no quantified independent onboarding example located. + +### Current-network compatibility + +- Existing ad stack may ease integration; does not transfer acceptance. +- Aggregates demand; exclusivity and share are set in private terms. + +## Directory-ready corrections and additions + +Proposed complete AdNetworkFacts record, excluding minTraffic. Keep published values with their dates and qualifications. + +### Key numbers + +- None published; retain an empty key-number list. + +### Joining and payment + +- **Product fit:** Web/app monetization with 150+ ad-serving partners, SDK, video and PMP. Source: [https://anymindgroup.com/products/anymanager/](https://anymindgroup.com/products/anymanager/). +- **Application:** Contact AnyMind; no self-serve entry gate found. Source: [https://anymindgroup.com/products/anymanager/](https://anymindgroup.com/products/anymanager/). +- **Regional fit:** APAC is the clearest published focus; broader coverage also offered. Source: [https://anymindgroup.com/case-study/?business=publishergrowth&pa=2](https://anymindgroup.com/case-study/?business=publishergrowth&pa=2). +- Revenue share: Fixed percentage agreed per publisher; not public. +- Payment terms: Not public. +- Payment threshold: Not public. +- Payment methods: Not public. + +## Unresolved conflicts and gaps + +- Terms search result showed an Aug 24 2026 update but page redirected on open; confirm in signed contract. +- No first-person application example with traffic, niche or geography. +- No public payout floor, payment methods or site-age rule. + +## Research attempts and sources + +Attempts are stated explicitly so missing evidence is not mistaken for an unavailable or reviewed source. + +- Reviewed product page, publisher cases and terms search result. +- Terms page redirected on open; claims are limited to search excerpt. +- Searched first-person entry reports; no qualified case found. + +### Sources checked + +- [AnyManager product page](https://anymindgroup.com/products/anymanager/) — official; checked 2026-10-22. Supports: web/app platform; 150+ ad serving partners; SDK/video/PMP. +- [Publisher case studies](https://anymindgroup.com/case-study/?business=publishergrowth&pa=2) — vendor_case_study, published 2025; checked 2026-10-22. Supports: regional examples in Vietnam, Thailand and Japan; no eligibility threshold. +- [AnyManager terms](https://anymanager.io/terms-of-service/) — official_terms, published 2026-08-24; checked 2026-10-22. Supports: search excerpt says share/payment set per publisher; page redirected. +- [Investor FAQ](https://anymindgroup.com/ir/faq/) — official; checked 2026-10-22. Supports: fixed percentage individually agreed. diff --git a/content_docs/ad-networks/research/buysellads-carbon-ads.md b/content_docs/ad-networks/research/buysellads-carbon-ads.md index 070c3e8c..fb0615b8 100644 --- a/content_docs/ad-networks/research/buysellads-carbon-ads.md +++ b/content_docs/ad-networks/research/buysellads-carbon-ads.md @@ -1,28 +1,84 @@ -# BuySellAds / Carbon Ads +# buysellads-carbon-ads: recommendation research -Checked 2026-10-16. +Checked: 2026-10-22 -## Joining +## Product and application -- Traffic: Not public. The earlier Carbon media-kit PDF could not be retrieved; the current BuySellAds publisher page was readable. Source checked: https://www.buysellads.com/publishers. Read 2026-10-16. -- Visitor location: Not public. The earlier Carbon media-kit PDF could not be retrieved; the current BuySellAds publisher page was readable. Source checked: https://www.buysellads.com/publishers. Read 2026-10-16. -- Content: Not public. The earlier Carbon media-kit PDF could not be retrieved; the current BuySellAds publisher page was readable. Source checked: https://www.buysellads.com/publishers. Read 2026-10-16. -- Google standing: Not public. The earlier Carbon media-kit PDF could not be retrieved; the current BuySellAds publisher page was readable. Source checked: https://www.buysellads.com/publishers. Read 2026-10-16. -- Must connect: Carbon Tag or API. Source: https://www.buysellads.com/publishers. Read 2026-10-16. -- Approval time: Not public. The earlier Carbon media-kit PDF could not be retrieved; the current BuySellAds publisher page was readable. Source checked: https://www.buysellads.com/publishers. Read 2026-10-16. +- Product: Invitation-only contextual ad marketplace for developer/design audiences. +- Application or contact route: [https://www.carbonads.net/join](https://www.carbonads.net/join). +- Recommendation role: **primary**. Curated invite-only niche network; reviews pageviews without a fixed published floor. -## Pay +## Official facts -- Publisher share, payout timing, threshold, method, and currency are not public in the reviewed Carbon Ads media kit. (Source: https://www.buysellads.com/hubfs/Carbon%20Ads%20Media%20Kit.pdf, read 2026-10-16.) +Facts below apply to the named program. Missing numeric amounts mean the source did not publish a number. -## Rules +- **Invitation — required**; period: before service; scope: site; program: Carbon. Source: [https://www.carbonads.net/faq](https://www.carbonads.net/faq). +- **Audience — must be relevant**; period: ongoing; scope: site audience; program: Carbon. Source: [https://www.carbonads.net/faq](https://www.carbonads.net/faq). +- **Traffic — reviews**; period: application; scope: site; program: Carbon. Source: [https://www.carbonads.net/faq](https://www.carbonads.net/faq). Note: No fixed cutoff published. +- **Exclusivity — requires**; period: ongoing; scope: entire site; program: Carbon. Source: [https://www.carbonads.net/faq](https://www.carbonads.net/faq). -- Carbon Ads says its units are custom implemented to fit a publisher's design. It does not publish exclusivity, content restrictions, contract length, or notice in the media kit. (Source: https://www.buysellads.com/hubfs/Carbon%20Ads%20Media%20Kit.pdf, read 2026-10-16.) +## Publisher-reported observations -## Service +Individual reports, not acceptance-rate evidence or revenue forecasts. -- The media kit describes performance tracking, analytics, monthly reporting, and optimization recommendations. (Source: https://www.buysellads.com/hubfs/Carbon%20Ads%20Media%20Kit.pdf, read 2026-10-16.) +- No reliable dated publisher admission or migration account with useful traffic context was located. See search attempts below. -## Logo +## Editorial inference -Logo source: https://www.carbonads.net/images/logo-dark.svg (read 2026-10-16) +### Practical fit + +Recommend only when niche fit is strong and publisher accepts site-wide exclusivity. Treat as display replacement, not incremental demand. + +### Estimated range and confidence + +- Traffic range: not estimated; available figures are absent or not comparable enough to support a practical band. +- Revenue range: not estimated. + +- Geography: Developer/design audience; strongest demand in US, Canada and Europe. +- Site age: No public age rule found. +- Confidence: **medium**. FAQ is specific about audience, review and exclusivity but gives no cutoff; targeted search found no first-person entry case. + +### Current-network compatibility + +- Current display provider conflicts with Carbon's exclusivity. +- Carbon-only ads across the site, with no other-network backfill; replacement only. + +## Directory-ready corrections and additions + +Proposed complete AdNetworkFacts record, excluding minTraffic. Keep published values with their dates and qualifications. + +### Key numbers + +- **Withdrawal balance:** $1 — Method minimums: $20 PayPal, $50 check, $500 wire; fees may apply. Source: [https://www.carbonads.net/faq](https://www.carbonads.net/faq). +- **Revenue timing:** Posted within 30 days; withdrawable within 60 days — Open Collective quarterly by request. Source: [https://www.carbonads.net/faq](https://www.carbonads.net/faq). + +### Joining and payment + +- **Application:** Invite-only; review usually 5–7 business days — Reviews traffic, relevance, maintenance and capacity. Source: [https://www.carbonads.net/faq](https://www.carbonads.net/faq). +- **Audience:** English-speaking developer/design audience; US, Canada, Europe strongest — Other areas depend on demand. Source: [https://www.carbonads.net/faq](https://www.carbonads.net/faq). +- **Exclusivity:** Carbon must be the only ads on the site; no backfill — Replacement, not add-on. Source: [https://www.carbonads.net/faq](https://www.carbonads.net/faq). +- **Traffic:** Monthly pageviews reviewed; no fixed minimum. Source: [https://www.carbonads.net/faq](https://www.carbonads.net/faq). +- Revenue share: Not public. +- Payment terms: Earnings posted monthly within 30 days; withdrawal within 60 days. +- Payment threshold: $1 before method minimums. +- Payment methods: PayPal, Check, Wire transfer, Open Collective, quarterly by request. + +## Unresolved conflicts and gaps + +- No independent accepted/rejected case with traffic, niche and geography. +- No numeric floor or revenue share. +- Vendor CPM range omitted from revenue forecasts. + +## Research attempts and sources + +Attempts are stated explicitly so missing evidence is not mistaken for an unavailable or reviewed source. + +- Reviewed FAQ, application, about and payout details. +- Searched first-person application/performance accounts; found comparisons, not verified publisher cases. + +### Sources checked + +- [Current publisher FAQ](https://www.carbonads.net/faq) — official; checked 2026-10-22. Supports: invite/review; audience/regions; no cutoff; exclusivity and payout. +- [About Carbon](https://www.carbonads.net/about) — official; checked 2026-10-22. Supports: curated tech/design inventory. +- [Publisher application](https://www.carbonads.net/join) — official; checked 2026-10-22. Supports: join route. +- [Partner comparison](https://www.reddit.com/r/adops/comments/1oxy825) — publisher_forum, published 2025; checked 2026-10-22. Supports: community calls Carbon a dev/open-source niche; not entry evidence. diff --git a/content_docs/ad-networks/research/clickio.md b/content_docs/ad-networks/research/clickio.md index d6e5001a..d4e1c9c7 100644 --- a/content_docs/ad-networks/research/clickio.md +++ b/content_docs/ad-networks/research/clickio.md @@ -1,30 +1,93 @@ -# Clickio +# clickio: recommendation research -Checked 2026-10-16. +Checked: 2026-10-22 -## Joining +## Product and application -- Traffic: 100,000 to 1,000,000 pageviews by region. Note: Monthly; $500 in monthly revenue may qualify below the threshold. Source: https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards. Read 2026-10-16. -- Visitor location: Sanctioned countries excluded. Note: Pageview thresholds also vary by region. Source: https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards. Read 2026-10-16. -- Content: Follow AdSense policies and third-party rights rules. Source: https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards. Read 2026-10-16. -- Google standing: Not public. The page requires policy compliance but does not state an account standing requirement. Source checked: https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards. Read 2026-10-16. -- Must connect: Publish ads.txt; provide GA4 or a six-month report if requested. Source: https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards. Read 2026-10-16. -- Site history: Six months of traffic data if external verification is unavailable. Source: https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards. Read 2026-10-16. -- Ad revenue: $500 a month. Note: Possible traffic alternative; ongoing minimum account earnings. Source: https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards. Read 2026-10-16. +- Product: Managed display monetization and yield optimization. +- Application or contact route: [https://clickio.com/contact/](https://clickio.com/contact/). +- Recommendation role: **primary**. Country-specific indicative traffic guide or >$500/month ad revenue alternative. -## Pay +## Official facts -- No standard revenue-share rate is public. Clickio bills monthly. The payment page states Net 60, payment around the 25th to 30th two months later, and method-specific thresholds: $100 equivalent for ACH/eCheck/SEPA, check, and PayPal; $200 wire; WebMoney $10; Payoneer GBP 100. Local-currency options are available for some methods. (Source: https://docs.clickio.com/books/get-started/page/payments-billing, read 2026-10-16.) +Facts below apply to the named program. Missing numeric amounts mean the source did not publish a number. -## Rules +- **Monthly PV — indicative**: 100,000 pageviews; period: month; scope: UK, France, US, Australia, Canada; program: Fully Managed. Source: [https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards](https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards). +- **Monthly PV — indicative**: 250,000 pageviews; period: month; scope: Italy, Spain; program: Fully Managed. Source: [https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards](https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards). +- **Monthly PV — indicative**: 300,000 pageviews; period: month; scope: rest of Europe; program: Fully Managed. Source: [https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards](https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards). +- **Monthly PV — indicative**: 500,000 pageviews; period: month; scope: Portugal; program: Fully Managed. Source: [https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards](https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards). +- **Monthly PV — indicative**: 750,000 pageviews; period: month; scope: Brazil, Colombia, Mexico; program: Fully Managed. Source: [https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards](https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards). +- **Monthly PV — indicative**: 1,000,000 pageviews; period: month; scope: rest of Latin America and world; program: Fully Managed. Source: [https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards](https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards). +- **Ad revenue — alternative; greater than**: 500 USD; period: month; scope: below regional PV guide; program: Fully Managed. Source: [https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards](https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards). Note: May require three consecutive months of proof. +- **Viewability — ongoing minimum**: 50 percent; period: ongoing; scope: served inventory; program: Fully Managed. Source: [https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards](https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards). -- Clickio's entry page states no publisher exclusivity or contract notice rule. The separate Clickio Prism CDN integration has separate requirements and is not the general managed service. (Sources: https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards and https://docs.clickio.com/books/clickio-prism/page/clickio-cdn-integration-for-non-wordpress-sites, read 2026-10-16.) +## Publisher-reported observations -## Service +Individual reports, not acceptance-rate evidence or revenue forecasts. -- Fully Managed Service includes real-time reporting, an account manager, and technical/ad-operations support. Unified Reports can combine Clickio, AdSense/Ad Manager, and Google Analytics reporting and export data. (Sources: https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards and https://docs.clickio.com/books/clickio-publisher-platform/page/unified-reports, read 2026-10-16.) +- **2022 — Unidentified site** (Not stated). Poster said they used Clickio while evaluating emerging-market demand and described more ads than AdSense. Limits: No traffic, revenue, country split or application decision. Source: [https://www.reddit.com/r/adops/comments/vi0i7e](https://www.reddit.com/r/adops/comments/vi0i7e). -## Logo +## Editorial inference -Logo source: https://docs.clickio.com/uploads/images/system/2020-03-Mar/scaled-200-43/clickio-gcpp-logo.png (read 2026-10-16) +### Practical fit + +Shortlist when the audience geography matches official guidance or the site can document >$500 monthly revenue; do not collapse country bars into one global floor. + +### Estimated range and confidence + +- Traffic reference: **100,000–1,000,000 pageviews per month**; confidence: high. This is not an admission guarantee. + - Indicative regional guide, not guaranteed approval. + - Basis: [https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards](https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards). +- Revenue range: not estimated. + +- Geography: Country-specific: selected Tier1 markets at 100k PV; some regions at 1m. +- Site age: No age minimum; six months of reports is one traffic verification option. +- Confidence: **high**. Official standards give regional PV values, a revenue route and technical rules; one forum account confirms use but has no metrics. + +### Current-network compatibility + +- Other network membership is not evidence of Clickio approval. +- Confirm managed-service exclusivity. Six months of analytics is verification evidence, not site age. + +## Directory-ready corrections and additions + +Proposed complete AdNetworkFacts record, excluding minTraffic. Keep published values with their dates and qualifications. + +### Key numbers + +- **Indicative traffic guide:** 100,000–1,000,000 monthly pageviews — Country-specific Fully Managed guide; not guaranteed approval. Source: [https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards](https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards). +- **Below-guide route:** >$500 monthly ad revenue — May require proof for 3 consecutive months. Source: [https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards](https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards). +- **Pay day:** Net 60 — Some demand partners may offer Net30. Source: [https://docs.clickio.com/books/get-started/page/payments-billing](https://docs.clickio.com/books/get-started/page/payments-billing). + +### Joining and payment + +- **Traffic:** 100k PV UK/France/US/Australia/Canada; 250k Italy/Spain; 300k rest Europe; 500k Portugal; 750k Brazil/Colombia/Mexico; 1m rest LatAm/world — Indicative guide. Source: [https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards](https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards). +- **Revenue alternative:** >$500 monthly ad revenue below regional guide — May require proof for 3 consecutive months. Source: [https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards](https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards). +- **Verification:** Six months of GA reports may be used if other verification unavailable — Evidence window, not domain-age rule. Source: [https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards](https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards). +- **Technical:** ads.txt, IAB-approved CMP, >50% viewability; follow AdSense policy. Source: [https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards](https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards). +- Revenue share: Variable by demand-partner tariff. +- Payment terms: Net 60; some demand partners Net30. +- Payment threshold: $100 ACH/eCheck/SEPA/check/PayPal; $200 wire; $10 WebMoney; GBP100 Payoneer. +- Payment methods: ACH, eCheck, SEPA, Wire, Check, PayPal, WebMoney, Payoneer. +- Join summary: Country guide varies; below-guide route is >$500 monthly ad revenue, potentially verified across three months. + +## Unresolved conflicts and gaps + +- Regional numbers are indicative, not guaranteed. +- No dated first-person outcome with exact traffic. +- Six months of analytics is not a site-age requirement. + +## Research attempts and sources + +Attempts are stated explicitly so missing evidence is not mistaken for an unavailable or reviewed source. + +- Reviewed current entry standards, payment help and agreement. +- Searched Reddit onboarding/emerging-market reports; found one unquantified user. +- Kept six-month reporting separate from site age. + +### Sources checked + +- [Clickio entry standards](https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards) — official; checked 2026-10-22. Supports: regional pageview guidance; $500 alternative; verification/policy/CMP/viewability. +- [Payments help](https://docs.clickio.com/books/get-started/page/payments-billing) — official; checked 2026-10-22. Supports: Net60 and method thresholds. +- [Publisher agreement](https://legal.clickio.com/PublisherAgreement/) — official; checked 2026-10-22. Supports: payment schedule options. +- [Publisher Clickio discussion](https://www.reddit.com/r/adops/comments/vi0i7e) — publisher_forum, published 2022; checked 2026-10-22. Supports: one use report with no metrics. diff --git a/content_docs/ad-networks/research/concert.md b/content_docs/ad-networks/research/concert.md index 97586c23..faabceb8 100644 --- a/content_docs/ad-networks/research/concert.md +++ b/content_docs/ad-networks/research/concert.md @@ -1,28 +1,80 @@ -# Concert +# concert: recommendation research -Checked 2026-10-16. +Checked: 2026-10-22 -## Joining +## Product and application -- Traffic: Not public. The reviewed official pages do not state this rule. Source checked: https://admanager.concert.io/terms. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://admanager.concert.io/terms. Read 2026-10-16. -- Content: Not public. The reviewed official pages do not state this rule. Source checked: https://admanager.concert.io/terms. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://admanager.concert.io/terms. Read 2026-10-16. -- Must connect: Not public. The reviewed official pages do not state this rule. Source checked: https://admanager.concert.io/terms. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://admanager.concert.io/terms. Read 2026-10-16. +- Product: Publisher-led curated SSP and premium marketplace. +- Application or contact route: [https://www.voxmedia.com/brands/concert](https://www.voxmedia.com/brands/concert). +- Recommendation role: **sales_collective**. Curated publisher-led SSP; no public self-serve route or entry gate. -## Pay +## Official facts -- Publisher revenue share, payment timing, threshold, methods, and currency are not public in the reviewed source. The Concert terms found concern advertisers paying for orders. (Source: https://admanager.concert.io/terms, read 2026-10-16.) +Facts below apply to the named program. Missing numeric amounts mean the source did not publish a number. -## Rules +- **Publisher application — not public**; period: not stated; scope: publisher inventory; program: Concert. Source: [https://www.voxmedia.com/2022/6/7/23157157/vox-media-concert-ssp-publisher-led-supply-side-platform-trade-desk-as-an-exclusive-launch-partner/](https://www.voxmedia.com/2022/6/7/23157157/vox-media-concert-ssp-publisher-led-supply-side-platform-trade-desk-as-an-exclusive-launch-partner/). +- **Traffic/revenue — not public**; period: not stated; scope: publisher; program: Concert. Source: [https://www.voxmedia.com/2022/6/7/23157157/vox-media-concert-ssp-publisher-led-supply-side-platform-trade-desk-as-an-exclusive-launch-partner/](https://www.voxmedia.com/2022/6/7/23157157/vox-media-concert-ssp-publisher-led-supply-side-platform-trade-desk-as-an-exclusive-launch-partner/). -- Publisher exclusivity, ad layout control, publisher content rules, contract term, and notice are not public. Advertiser ad terms do not establish publisher terms. (Source: https://admanager.concert.io/terms, read 2026-10-16.) +## Publisher-reported observations -## Service +Individual reports, not acceptance-rate evidence or revenue forecasts. -- Publisher dashboard, reporting, and support details are not public in the reviewed sources. (Source: https://admanager.concert.io/terms, read 2026-10-16.) +- No reliable dated publisher admission or migration account with useful traffic context was located. See search attempts below. -## Logo +## Editorial inference -Logo source: https://framerusercontent.com/images/VHZAk9HIYMaEJaZonT5Yz6qTJxw.svg (read 2026-10-16) +### Practical fit + +Do not recommend as a routine solo-publisher application. Relevant to established media groups pursuing curated marketplace or sales relationships. + +### Estimated range and confidence + +- Traffic range: not estimated; available figures are absent or not comparable enough to support a practical band. +- Revenue range: not estimated. + +- Geography: No public country rule found. +- Site age: No public age minimum found. +- Confidence: **low**. Announcements and trade coverage show curated positioning, but no publisher policy or first-person application story was found. + +### Current-network compatibility + +- SSP access is a sales relationship, not a generic extra tag. +- Advertiser terms do not establish publisher eligibility. + +## Directory-ready corrections and additions + +Proposed complete AdNetworkFacts record, excluding minTraffic. Keep published values with their dates and qualifications. + +### Key numbers + +- None published; retain an empty key-number list. + +### Joining and payment + +- **Product:** Publisher-led curated SSP for premium publisher inventory. Source: [https://www.voxmedia.com/2022/6/7/23157157/vox-media-concert-ssp-publisher-led-supply-side-platform-trade-desk-as-an-exclusive-launch-partner/](https://www.voxmedia.com/2022/6/7/23157157/vox-media-concert-ssp-publisher-led-supply-side-platform-trade-desk-as-an-exclusive-launch-partner/). +- **Application:** No public publisher form or qualification page found — Available terms were advertiser-facing. Source: [https://admanager.concert.io/terms](https://admanager.concert.io/terms). +- **Publisher fit:** Launch examples are established media groups; examples are not an admission minimum. Source: [https://www.voxmedia.com/about-vox-media/2018/5/31/17413008/top-digital-publishers-join-concert-to-create-largest-premium-advertising-marketplace-online/](https://www.voxmedia.com/about-vox-media/2018/5/31/17413008/top-digital-publishers-join-concert-to-create-largest-premium-advertising-marketplace-online/). +- Revenue share: Not public. +- Payment terms: Not public. +- Payment threshold: Not public. +- Payment methods: Not public. + +## Unresolved conflicts and gaps + +- No public publisher application, gate, payout terms or publisher agreement. +- Available terms were advertiser-facing and not used to infer eligibility. + +## Research attempts and sources + +Attempts are stated explicitly so missing evidence is not mistaken for an unavailable or reviewed source. + +- Reviewed official publisher announcements and independent trade coverage. +- Checked current available terms; they are advertiser-facing. +- Searched first-person publisher application experiences; none found. + +### Sources checked + +- [Vox Concert SSP launch](https://www.voxmedia.com/2022/6/7/23157157/vox-media-concert-ssp-publisher-led-supply-side-platform-trade-desk-as-an-exclusive-launch-partner/) — official_publisher_announcement, published 2022-06-07; checked 2026-10-22. Supports: publisher-led curated SSP. +- [Concert publisher group announcement](https://www.voxmedia.com/about-vox-media/2018/5/31/17413008/top-digital-publishers-join-concert-to-create-largest-premium-advertising-marketplace-online/) — official_publisher_announcement, published 2018-05-31; checked 2026-10-22. Supports: established member examples. +- [Trade coverage](https://www.marketingbrew.com/stories/2022/10/19/why-vox-media-continues-to-invest-in-ad-tech) — independent_trade_press, published 2022-10-19; checked 2026-10-22. Supports: programmatic path; no open enrollment. +- [Ad Manager terms](https://admanager.concert.io/terms) — official_advertiser_terms; checked 2026-10-22. Supports: advertiser-facing. diff --git a/content_docs/ad-networks/research/ethicalads.md b/content_docs/ad-networks/research/ethicalads.md index 4eb27914..ad31ccfc 100644 --- a/content_docs/ad-networks/research/ethicalads.md +++ b/content_docs/ad-networks/research/ethicalads.md @@ -1,28 +1,87 @@ -# EthicalAds +# ethicalads: recommendation research -Checked 2026-10-16. +Checked: 2026-10-22 -## Joining +## Product and application -- Traffic: No minimum stated. Source: https://www.ethicalads.io/publisher-policy/. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://www.ethicalads.io/publisher-policy/. Read 2026-10-16. -- Content: Meet the publisher policy. Note: Ads must appear above the fold on desktop and mobile. Source: https://www.ethicalads.io/publisher-policy/. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://www.ethicalads.io/publisher-policy/. Read 2026-10-16. -- Must connect: Not public. The reviewed official pages do not state this rule. Source checked: https://www.ethicalads.io/publisher-policy/. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://www.ethicalads.io/publisher-policy/. Read 2026-10-16. +- Product: Contextual developer-focused ad network. +- Application or contact route: [https://www.ethicalads.io/publishers/](https://www.ethicalads.io/publishers/). +- Recommendation role: **supplemental**. 50k monthly pageview threshold with discretionary exceptions for close-fit developer sites. -## Pay +## Official facts -- Publishers receive 70%. Payout is monthly, with a $50 threshold and a target payment date by the 15th. Supported methods include Stripe Connect/bank transfer, PayPal, OpenCollective, and GitHub Sponsors. (Source: https://www.ethicalads.io/publisher-policy/, read 2026-10-16.) +Facts below apply to the named program. Missing numeric amounts mean the source did not publish a number. -## Rules +- **Traffic — minimum**: 50,000 pageviews; period: month; scope: developer sites; program: Publisher program. Source: [https://www.ethicalads.io/publishers/faq/](https://www.ethicalads.io/publishers/faq/). Note: High-quality fast-growing sites may be considered below. +- **Content — must fit developer audience and policy**; period: ongoing; scope: site; program: Publisher program. Source: [https://www.ethicalads.io/publisher-guide/](https://www.ethicalads.io/publisher-guide/). +- **Ad placement — maximum**: 1 EthicalAds ad; period: per page; scope: publisher page; program: Publisher program. Source: [https://www.ethicalads.io/publisher-policy/](https://www.ethicalads.io/publisher-policy/). +- **Publisher share — share**: 70 percent; period: applicable revenue; scope: publisher; program: Publisher program. Source: [https://www.ethicalads.io/publisher-policy/](https://www.ethicalads.io/publisher-policy/). -- The policy permits a fallback ad or sharing visitor traffic with another network. It says not to show another ad on the same page as an EthicalAds ad. Content that violates the publisher policy can lead to ad disabling. No fixed contract term or notice period is stated. (Source: https://www.ethicalads.io/publisher-policy/, read 2026-10-16.) +## Publisher-reported observations -## Service +Individual reports, not acceptance-rate evidence or revenue forecasts. -- The publisher policy explains setup and policy. Public dashboard features and support response times are not stated. (Sources: https://www.ethicalads.io/publisher-policy/ and https://www.ethicalads.io/terms-of-service/, read 2026-10-16.) +- No reliable dated publisher admission or migration account with useful traffic context was located. See search attempts below. -## Logo +## Editorial inference -Logo source: https://www.ethicalads.io/theme/img/ethicalads-logo-blue.svg (read 2026-10-16) +### Practical fit + +Strong supplemental choice for technical sites near/above 50k PV/month. Below that, an exception is discretionary and should not be treated as routine. + +### Estimated range and confidence + +- Traffic reference: **50,000–50,000 pageviews per month**; confidence: high. This is not an admission guarantee. + - Official threshold; exceptions possible. + - Basis: [https://www.ethicalads.io/publishers/faq/](https://www.ethicalads.io/publishers/faq/). +- Revenue range: not estimated. + +- Geography: North America/Europe strongest; Australia/NZ may work. +- Site age: No public age minimum found. +- Confidence: **medium**. Official threshold and placement facts are clear; no reliable dated publisher acceptance story found. + +### Current-network compatibility + +- Can coexist on separate pages/requests; no same-page competing ads. +- Different pages/requests may use other providers; no competing ad on the same page. + +## Directory-ready corrections and additions + +Proposed complete AdNetworkFacts record, excluding minTraffic. Keep published values with their dates and qualifications. + +### Key numbers + +- **Traffic:** 50,000 monthly pageviews — Exceptions may be considered for close/fast-growing high-quality developer sites. Source: [https://www.ethicalads.io/publishers/faq/](https://www.ethicalads.io/publishers/faq/). +- **Share:** 70% — Published publisher policy. Source: [https://www.ethicalads.io/publisher-policy/](https://www.ethicalads.io/publisher-policy/). +- **Payment minimum:** $50 — Monthly target by the 15th. Source: [https://www.ethicalads.io/publisher-policy/](https://www.ethicalads.io/publisher-policy/). + +### Joining and payment + +- **Traffic:** At least 50k PV/month; discretionary exception path for close-fit developer sites. Source: [https://www.ethicalads.io/publishers/faq/](https://www.ethicalads.io/publishers/faq/). +- **Audience:** Developer-focused: software, OSS, DevOps, security, data science. Source: [https://www.ethicalads.io/publisher-guide/](https://www.ethicalads.io/publisher-guide/). +- **Placement:** One EthicalAds placement per page; no simultaneous competing ad on that page. Source: [https://www.ethicalads.io/publisher-policy/](https://www.ethicalads.io/publisher-policy/). +- **Payment:** 70% share; $50 threshold; target by 15th. Source: [https://www.ethicalads.io/publisher-policy/](https://www.ethicalads.io/publisher-policy/). +- Revenue share: 70%. +- Payment terms: Monthly, target by 15th. +- Payment threshold: $50. +- Payment methods: PayPal, Open Collective, GitHub Sponsors, Stripe Connect/bank transfer. + +## Unresolved conflicts and gaps + +- No dated firsthand acceptance/rejection with traffic, niche and geography. +- CPM statements omitted from forecasts. +- No age or tier-1 share gate. + +## Research attempts and sources + +Attempts are stated explicitly so missing evidence is not mistaken for an unavailable or reviewed source. + +- Reviewed FAQ, guide, policy and terms. +- Searched publisher accounts; found no qualified entry example. Excluded EthicalAds company revenue as not a publisher result. + +### Sources checked + +- [Publisher FAQ](https://www.ethicalads.io/publishers/faq/) — official; checked 2026-10-22. Supports: 50k threshold and exceptions. +- [Publisher policy](https://www.ethicalads.io/publisher-policy/) — official; checked 2026-10-22. Supports: 70% share; $50 minimum; monthly timing and placement. +- [Publisher guide](https://www.ethicalads.io/publisher-guide/) — official; checked 2026-10-22. Supports: technical audience fit. +- [Terms](https://www.ethicalads.io/terms-of-service/) — official; checked 2026-10-22. Supports: publisher policy. diff --git a/content_docs/ad-networks/research/ezoic.md b/content_docs/ad-networks/research/ezoic.md index e02855c7..15f72ca9 100644 --- a/content_docs/ad-networks/research/ezoic.md +++ b/content_docs/ad-networks/research/ezoic.md @@ -1,28 +1,89 @@ -# Ezoic +# ezoic: recommendation research -Checked 2026-10-16. +Checked: 2026-10-22 -## Joining +## Product and application -- Traffic: 250,000 monthly active users. Note: Incubator may accept smaller sites. Source: https://osticket.ezoic.com/kb/article/getting-started-ezoics-requirements. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://osticket.ezoic.com/kb/article/getting-started-ezoics-requirements. Read 2026-10-16. -- Content: Original content in a supported language. Source: https://osticket.ezoic.com/kb/article/getting-started-ezoics-requirements. Read 2026-10-16. -- Google standing: Comply with Google and AdSense policies. Note: AdSense approval is not required for most sites. Source: https://osticket.ezoic.com/kb/article/getting-started-ezoics-requirements. Read 2026-10-16. -- Must connect: Google Analytics for traffic verification. Source: https://osticket.ezoic.com/kb/article/getting-started-ezoics-requirements. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://osticket.ezoic.com/kb/article/getting-started-ezoics-requirements. Read 2026-10-16. +- Product: Managed ad monetization with integration and Incubator path. +- Application or contact route: [https://www.ezoic.com/get-started/](https://www.ezoic.com/get-started/). +- Recommendation role: **primary**. 250k MAU for new sites; Incubator below gate is limited and discretionary. -## Pay +## Official facts -- Ezoic's Terms say publishers receive at least 82% of net ad revenue unless another agreement applies. Payment is approximately 35 days after advertiser payment, with a $20 threshold. Ezoic's payment help page instead describes a Net 30 cycle. Trust the legal Terms for the contract statement and note this timing conflict for confirmation. Methods listed by Ezoic include PayPal, Payoneer bank transfer, and check. (Sources: https://www.ezoic.com/terms and https://support.ezoic.com/kb/article/ezoic-payments?lang=en-US&lang=it%3Fid%3Dezoic-payments, read 2026-10-16.) +Facts below apply to the named program. Missing numeric amounts mean the source did not publish a number. -## Rules +- **Monthly active users — minimum**: 250,000 MAU; period: month; scope: new sites; program: Ezoic. Source: [https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES](https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES). +- **Incubator capacity — limited selection**: 20 sites; period: month; scope: below general gate; program: Incubator. Source: [https://support.ezoic.com/kb/article/ezoic-incubator-program](https://support.ezoic.com/kb/article/ezoic-incubator-program). +- **Google policy — must comply**; period: ongoing; scope: all sites; program: Ezoic. Source: [https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES](https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES). +- **Grandfathering — continuous integration required**; period: ongoing; scope: pre-2026-02-19 sites; program: Ezoic. Source: [https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES](https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES). -- Content must follow AdSense policies. Public publisher exclusivity, placement controls, contract length, and notice were not confirmed in the reviewed sources. Older policy material conflicts with the 2026 traffic rule; the new eligibility page is trusted for current entry. (Sources: https://osticket.ezoic.com/kb/article/getting-started-ezoics-requirements and https://www.ezoic.com/wp-content/uploads/2020/12/Basic-Ad-Policy-Requirements.pdf, read 2026-10-16.) +## Publisher-reported observations -## Service +Individual reports, not acceptance-rate evidence or revenue forecasts. -- Ezoic describes its tools and dashboard through the publisher site; exact reporting/support service levels were not verified in the sources reviewed. (Source: https://www.ezoic.com/web-publishers, read 2026-10-16.) +- **2024 — Unidentified content publisher** (Not stated). Traffic: 200000 monthly visits (200k–250k). Reported monthly ad revenue: 1,078. Reported Ezoic plus Google Ads and about $1,078 monthly earnings. Limits: Predates 2026 gate; visits are not MAU. Source: [https://www.reddit.com/r/adops/comments/1ftuclz](https://www.reddit.com/r/adops/comments/1ftuclz). +- **2026 — Unidentified new site** (Not stated). Traffic: 2000 visitors (under per month). Poster said a 3.5-month-old site was not approved by Incubator. Limits: Anonymous; niche/reason absent. Source: [https://www.reddit.com/r/Blogging/comments/1uv87ne](https://www.reddit.com/r/Blogging/comments/1uv87ne). -## Logo +## Editorial inference -Logo source: https://www.ezoic.com/brand/lockup-dark.png (read 2026-10-16) +### Practical fit + +Shortlist when new site clears 250k MAU or has exceptional Incubator evidence. For a low-volume solo blog, the limited program is not reliable access. + +### Estimated range and confidence + +- Traffic range: not estimated; available figures are absent or not comparable enough to support a practical band. +- Revenue range: not estimated. + +- Geography: No public country rule found. +- Site age: No public age minimum found. +- Confidence: **high**. Current official pages establish MAU and narrow Incubator. Older earnings examples measure visits, not MAU. + +### Current-network compatibility + +- Pre-cutoff accounts may retain access only with continuity; not applicable to new site. +- Typically manages display setup; verify current setup before switching. +- Grandfathered access does not transfer to a newly added site. + +## Directory-ready corrections and additions + +Proposed complete AdNetworkFacts record, excluding minTraffic. Keep published values with their dates and qualifications. + +### Key numbers + +- **New-site gate:** 250,000 monthly active users — MAU, not PV or sessions. Source: [https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES](https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES). +- **Share:** At least 82% — Net display-ad revenue unless separate agreement. Source: [https://www.ezoic.com/terms](https://www.ezoic.com/terms). +- **Payment minimum:** $20 — Published terms. Source: [https://www.ezoic.com/terms](https://www.ezoic.com/terms). + +### Joining and payment + +- **Traffic:** New sites generally need 250k MAU; do not convert to PV/sessions. Source: [https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES](https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES). +- **Incubator:** Up to 20 sites/month; discretionary review based on growth, site value, backend quality and publisher profile. Source: [https://support.ezoic.com/kb/article/ezoic-incubator-program](https://support.ezoic.com/kb/article/ezoic-incubator-program). +- **Grandfathering:** Sites monetizing before 2026-02-19 may retain access with continuous integration; >7-day removal can end status. Source: [https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES](https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES). +- **Content/tech:** Original supported-language content, Google policies and JavaScript integration; AdSense approval generally not required. Source: [https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES](https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES). +- Revenue share: At least 82% of net display-ad revenue. +- Payment terms: About 35 days after advertiser payment; payment help also describes Net30 and optional longer cycles. +- Payment threshold: $20. +- Payment methods: Wise, PayPal, Payoneer, Check. +- Join summary: 250k monthly active users for new sites; limited Incubator below gate. + +## Unresolved conflicts and gaps + +- Anecdotes predate policy or lack exact MAU. +- No current accepted report with measured MAU found. + +## Research attempts and sources + +Attempts are stated explicitly so missing evidence is not mistaken for an unavailable or reviewed source. + +- Reviewed current requirements, Incubator, terms and payment help. +- Compared a historical earnings report and recent small-site rejection with limits. +- Did not convert visits to MAU. + +### Sources checked + +- [Current Ezoic requirements](https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES) — official; checked 2026-10-22. Supports: 250k MAU; grandfathering; Google/content. +- [Incubator guidance](https://support.ezoic.com/kb/article/ezoic-incubator-program) — official; checked 2026-10-22. Supports: 20 slots/month; discretionary selection. +- [Terms](https://www.ezoic.com/terms) — official; checked 2026-10-22. Supports: share and payment floor. +- [Ezoic publisher earnings](https://www.reddit.com/r/adops/comments/1ftuclz) — publisher_forum, published 2024; checked 2026-10-22. Supports: 200–250k visits and $1,078; not MAU. +- [Incubator rejection](https://www.reddit.com/r/Blogging/comments/1uv87ne) — publisher_forum, published 2026; checked 2026-10-22. Supports: under 2k visitors/mo; 3.5-month site. diff --git a/content_docs/ad-networks/research/freestar.md b/content_docs/ad-networks/research/freestar.md index 55cd8e5f..e5018d2a 100644 --- a/content_docs/ad-networks/research/freestar.md +++ b/content_docs/ad-networks/research/freestar.md @@ -1,28 +1,88 @@ -# Freestar +# freestar: recommendation research -Checked 2026-10-16. +Checked: 2026-10-22 -## Joining +## Product and application -- Traffic: Usually 1,000,000 pageviews. Note: Monthly. Source: https://freestar.com/contact-us/. Read 2026-10-16. -- Visitor location: At least 50% from the US, UK, Canada, New Zealand, or Australia. Source: https://freestar.com/publisher-quality-requirements/. Read 2026-10-16. -- Content: Original, human-focused, brand-safe content. Source: https://freestar.com/publisher-quality-requirements/. Read 2026-10-16. -- Google standing: Good standing with major ad providers. Source: https://freestar.com/publisher-quality-requirements/. Read 2026-10-16. -- Must connect: Provide GA4 access for review. Source: https://freestar.com/publisher-quality-requirements/. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://freestar.com/publisher-quality-requirements/ and https://freestar.com/contact-us/. Read 2026-10-16. +- Product: Managed ad monetization and ad operations. +- Application or contact route: [https://freestar.com/contact-us/](https://freestar.com/contact-us/). +- Recommendation role: **primary**. Typically around 1m PV/month, plus two explicit 50% audience checks; 1m is not a hard gate. -## Pay +## Official facts -- Revenue share, payment timing, threshold, methods, and currency are not public in the reviewed publisher pages. (Source: https://freestar.com/contact-us/, read 2026-10-16.) +Facts below apply to the named program. Missing numeric amounts mean the source did not publish a number. -## Rules +- **Monthly pageviews — typical, not hard minimum**: 1,000,000 pageviews; period: month; scope: typical publisher scale; program: Freestar. Source: [https://freestar.com/publisher-quality-requirements/](https://freestar.com/publisher-quality-requirements/). +- **Target markets — minimum**: 50 percent; period: of traffic; scope: US/UK/Canada/NZ/Australia; program: Freestar. Source: [https://freestar.com/publisher-quality-requirements/](https://freestar.com/publisher-quality-requirements/). +- **Organic audiences — minimum**: 50 percent; period: of traffic; scope: search/social/News/Discover/YouTube/Reddit/syndication; program: Freestar. Source: [https://freestar.com/publisher-quality-requirements/](https://freestar.com/publisher-quality-requirements/). +- **Content — must be original, human-focused, long-form and brand-safe**; period: ongoing; scope: site; program: Freestar. Source: [https://freestar.com/publisher-quality-requirements/](https://freestar.com/publisher-quality-requirements/). -- Public pages do not state exclusivity, placement control, contract duration, or notice. (Source: https://freestar.com/publisher-quality-requirements/, read 2026-10-16.) +## Publisher-reported observations -## Service +Individual reports, not acceptance-rate evidence or revenue forecasts. -- Freestar describes a dedicated account manager, technical team, and publisher consultants. The contact page says onboarding commonly takes three to six weeks. (Source: https://freestar.com/contact-us/, read 2026-10-16.) +- **2019 — Several unnamed publishers** (Not stated). Traffic: 1000000 monthly ad impressions (one report 1–2m; others 5m and 25m). Thread includes reports of smaller publishers accepted and larger sites using Freestar. Limits: Impressions not pageviews; old, no denominator or detailed niche. Source: [https://www.reddit.com/r/adops/comments/bxgb6c](https://www.reddit.com/r/adops/comments/bxgb6c). +- **2021 — Unidentified publisher** (Not stated). Said they used Freestar but could not compare before/after revenue. Limits: No traffic, revenue or geography. Source: [https://www.reddit.com/r/adops/comments/mcb34i](https://www.reddit.com/r/adops/comments/mcb34i). -## Logo +## Editorial inference -Logo source: https://freestar.com/wp-content/uploads/2025/12/fav-300x300.png (read 2026-10-16) +### Practical fit + +Consider near the typical million-PV scale if both 50% geography and audience-source checks fit. Ask directly below that. + +### Estimated range and confidence + +- Traffic range: not estimated; available figures are absent or not comparable enough to support a practical band. +- Revenue range: not estimated. + +- Geography: Explicit 50% from US/UK/Canada/NZ/Australia. +- Site age: No public age minimum found. +- Confidence: **medium**. Current official page has concrete audience rules; old forum accounts report impressions rather than PV. + +### Current-network compatibility + +- Partner history is reviewed, but other network approval is not Freestar acceptance. +- Managed service operates display stack; contract sets exclusivity. +- Organic audience includes social, news, Discover, YouTube, Reddit and syndication. + +## Directory-ready corrections and additions + +Proposed complete AdNetworkFacts record, excluding minTraffic. Keep published values with their dates and qualifications. + +### Key numbers + +- **Typical scale:** About 1m monthly pageviews — Typical, not a hard floor. Source: [https://freestar.com/publisher-quality-requirements/](https://freestar.com/publisher-quality-requirements/). +- **Target-market share:** 50% — US/UK/Canada/NZ/Australia. Source: [https://freestar.com/publisher-quality-requirements/](https://freestar.com/publisher-quality-requirements/). +- **Organic audience:** 50% — Includes social, News/Discover, YouTube, Reddit and syndication—not only search. Source: [https://freestar.com/publisher-quality-requirements/](https://freestar.com/publisher-quality-requirements/). + +### Joining and payment + +- **Traffic:** Typically about 1m PV/mo; all sizes can apply — Typical scale, not cutoff. Source: [https://freestar.com/contact-us/](https://freestar.com/contact-us/). +- **Geography:** At least half from US/UK/Canada/NZ/Australia. Source: [https://freestar.com/publisher-quality-requirements/](https://freestar.com/publisher-quality-requirements/). +- **Traffic source:** At least 50% from organic audiences; includes social/news/video/community/syndication. Source: [https://freestar.com/publisher-quality-requirements/](https://freestar.com/publisher-quality-requirements/). +- **Content:** Original, human-focused, mostly long-form, brand-safe; GA4 and history requested. Source: [https://freestar.com/publisher-quality-requirements/](https://freestar.com/publisher-quality-requirements/). +- Revenue share: Not public. +- Payment terms: Not public. +- Payment threshold: Not public. +- Payment methods: Not public. + +## Unresolved conflicts and gaps + +- No current entry example with exact PV and outcome. +- No impression-to-pageview conversion. +- Share and payout terms not public. + +## Research attempts and sources + +Attempts are stated explicitly so missing evidence is not mistaken for an unavailable or reviewed source. + +- Reviewed current quality and contact pages. +- Searched Reddit for first-person reports; found old impression-only accounts. +- Kept official organic audience definition broader than search. + +### Sources checked + +- [Publisher quality requirements](https://freestar.com/publisher-quality-requirements/) — official, published 2026-08-19; checked 2026-10-22. Supports: 50% organic includes social/news/Discover/YouTube/Reddit/syndication; 50% target markets; typical scale. +- [Contact/onboarding](https://freestar.com/contact-us/) — official; checked 2026-10-22. Supports: all sizes may apply. +- [Freestar publisher discussion](https://www.reddit.com/r/adops/comments/bxgb6c) — publisher_forum, published 2019; checked 2026-10-22. Supports: impression reports only. +- [Freestar comparison](https://www.reddit.com/r/adops/comments/mcb34i) — publisher_forum, published 2021; checked 2026-10-22. Supports: no reliable before/after revenue comparison. diff --git a/content_docs/ad-networks/research/geniee-ssp.md b/content_docs/ad-networks/research/geniee-ssp.md index 9151d3e9..a1a4a953 100644 --- a/content_docs/ad-networks/research/geniee-ssp.md +++ b/content_docs/ad-networks/research/geniee-ssp.md @@ -1,28 +1,86 @@ -# Geniee SSP +# geniee-ssp: recommendation research -Checked 2026-10-16. +Checked: 2026-10-22 -## Joining +## Product and application -- Traffic: Not public. The official SSP homepage returned no readable page content. Source checked: https://genieesspv.jp/. Read 2026-10-16. -- Visitor location: Not public. The official SSP homepage returned no readable page content. Source checked: https://genieesspv.jp/. Read 2026-10-16. -- Content: Not public. The official SSP homepage returned no readable page content. Source checked: https://genieesspv.jp/. Read 2026-10-16. -- Google standing: Not public. The official SSP homepage returned no readable page content. Source checked: https://genieesspv.jp/. Read 2026-10-16. -- Must connect: Not public. The official SSP homepage returned no readable page content. Source checked: https://genieesspv.jp/. Read 2026-10-16. -- Approval time: Not public. The official SSP homepage returned no readable page content. Source checked: https://genieesspv.jp/. Read 2026-10-16. +- Product: Supply-side platform and managed programmatic demand. +- Application or contact route: [https://admin.genieessp.com/app/signup/en_US](https://admin.genieessp.com/app/signup/en_US). +- Recommendation role: **infrastructure**. Contact/application-led SSP; no public traffic gate. Better fit for publishers with ad operations than a beginner blog. -## Pay +## Official facts -- Public share rate, payment timing, threshold, payment methods, and currency were not found. (Sources: https://genieesspv.jp/ and https://geniee.co.jp/, read 2026-10-16.) +Facts below apply to the named program. Missing numeric amounts mean the source did not publish a number. -## Rules +- **Traffic — not published**; period: not stated; scope: publisher properties; program: Geniee SSP. Source: [https://geniee.co.jp/doc/terms_of_service_en20250831.pdf](https://geniee.co.jp/doc/terms_of_service_en20250831.pdf). +- **Applicant — must be publisher and provide accurate application details**; period: before approval; scope: publisher; program: Geniee SSP. Source: [https://geniee.co.jp/doc/terms_of_service_en20250831.pdf](https://geniee.co.jp/doc/terms_of_service_en20250831.pdf). +- **Content — must exclude**; period: ongoing; scope: site/app; program: Geniee SSP. Source: [https://geniee.co.jp/doc/terms_of_service_en20250831.pdf](https://geniee.co.jp/doc/terms_of_service_en20250831.pdf). +- **Integration — install required tags**; period: ongoing; scope: approved site; program: Geniee SSP. Source: [https://geniee.co.jp/doc/terms_of_service_en20250831.pdf](https://geniee.co.jp/doc/terms_of_service_en20250831.pdf). -- Public publisher exclusivity, placement control, content rules, contract length, and notice were not found. (Source: https://genieesspv.jp/, read 2026-10-16.) +## Publisher-reported observations -## Service +Individual reports, not acceptance-rate evidence or revenue forecasts. -- Public publisher dashboard, reporting, and support terms were not found. (Source: https://genieesspv.jp/, read 2026-10-16.) +- No reliable dated publisher admission or migration account with useful traffic context was located. See search attempts below. -## Logo +## Editorial inference -Logo source: https://geniee.co.jp/wp/wp-content/themes/geniee/images/svg/GENIEE_TYPE-A_RGB_350x150_Transparent.svg (read 2026-10-16) +### Practical fit + +Consider for established Japan/APAC media and app publishers needing SSP infrastructure. Not a strong default solo-blog recommendation without a direct sales conversation. + +### Estimated range and confidence + +- Traffic range: not estimated; available figures are absent or not comparable enough to support a practical band. +- Revenue range: not estimated. + +- Geography: Japan-centered provider with international publisher support; no public country minimum. +- Site age: No public age minimum found. +- Confidence: **low**. Current official page and 2025 terms describe service and contract basics without a traffic floor. Search found no reliable first-person application evidence. + +### Current-network compatibility + +- Existing SSP/header-bidding partners may be compatible but do not prove admission. +- An SSP can sit in a larger stack; exact tags, demand setup and exclusivity are account-specific. + +## Directory-ready corrections and additions + +Proposed complete AdNetworkFacts record, excluding minTraffic. Keep published values with their dates and qualifications. + +### Key numbers + +- **Payment minimum:** $100 PayPal/Payoneer; $200 wire — From earlier publisher terms; 2025 English terms did not reconfirm the threshold. Source: [https://s.geniee.jp/aladdin/resources/GenieeInternational/terms_geniee_en.pdf](https://s.geniee.jp/aladdin/resources/GenieeInternational/terms_geniee_en.pdf). +- **Pay day:** By end of second month after calculation — Subject to advertiser payment; confirmed in current 2025 terms. Source: [https://geniee.co.jp/doc/terms_of_service_en20250831.pdf](https://geniee.co.jp/doc/terms_of_service_en20250831.pdf). + +### Joining and payment + +- **Application:** Submit publisher signup and accurate site details. Source: [https://admin.genieessp.com/app/signup/en_US](https://admin.genieessp.com/app/signup/en_US). +- **Traffic:** No public numeric floor located. Source: [https://geniee.co.jp/doc/terms_of_service_en20250831.pdf](https://geniee.co.jp/doc/terms_of_service_en20250831.pdf). +- **Content:** No false, obscene, infringing or illegal material. Source: [https://geniee.co.jp/doc/terms_of_service_en20250831.pdf](https://geniee.co.jp/doc/terms_of_service_en20250831.pdf). +- **Integration:** Install and retain Geniee tags. Source: [https://geniee.co.jp/doc/terms_of_service_en20250831.pdf](https://geniee.co.jp/doc/terms_of_service_en20250831.pdf). +- Revenue share: Not public. +- Payment terms: Current 2025 terms: transfer by end of second month after calculation, conditional on advertiser payment.. +- Payment threshold: Earlier terms: $100 PayPal/Payoneer; $200 wire; current 2025 terms do not reconfirm. +- Payment methods: Bank transfer (current 2025 terms), PayPal (current 2025 terms), Payoneer (listed in earlier terms; not reconfirmed), Wire transfer (listed in earlier terms; not reconfirmed). + +## Unresolved conflicts and gaps + +- 2025 current terms did not reconfirm older minimum-payment figures. +- No first-person publisher acceptance story with traffic, niche and country context. +- No public share, site-age or Google-standing gate. + +## Research attempts and sources + +Attempts are stated explicitly so missing evidence is not mistaken for an unavailable or reviewed source. + +- Reviewed current English publisher page, Japanese SSP page, signup, 2025 English terms and older payout terms. +- Searched publisher discussions and independent technology footprints; no qualified first-person application example found. +- Kept older payment minima explicitly dated rather than treating as currently reconfirmed. + +### Sources checked + +- [Geniee publisher services](https://en.geniee.co.jp/services/publishers/) — official; checked 2026-10-22. Supports: SSP/RTB publisher service. +- [Geniee Japan SSP](https://geniee.co.jp/products/ssp/) — official; checked 2026-10-22. Supports: Japanese market and full support; aggregate requests are not publisher traffic. +- [English publisher terms](https://geniee.co.jp/doc/terms_of_service_en20250831.pdf) — official_terms, published 2025-08-31; checked 2026-10-22. Supports: applicant details; content restrictions; payment timing and methods. +- [Older English publisher terms](https://s.geniee.jp/aladdin/resources/GenieeInternational/terms_geniee_en.pdf) — official_terms; checked 2026-10-22. Supports: old payout thresholds; not reconfirmed in 2025 terms. +- [Technology footprint estimate](https://www.redvolcano.io/data/technologies/geniee-monetization/) — independent_analysis; checked 2026-10-22. Supports: detected sites; not acceptance or traffic. diff --git a/content_docs/ad-networks/research/google-adsense.md b/content_docs/ad-networks/research/google-adsense.md index 0b1904c9..5b6cfd63 100644 --- a/content_docs/ad-networks/research/google-adsense.md +++ b/content_docs/ad-networks/research/google-adsense.md @@ -1,28 +1,87 @@ -# Google AdSense +# google-adsense: recommendation research -Checked 2026-10-16. +Checked: 2026-10-22 -## Joining +## Product and application -- Traffic: No minimum stated. Source: https://support.google.com/adsense/answer/9724?hl=en. Read 2026-10-16. -- Visitor location: Sign-up is available in listed countries. Source: https://support.google.com/adsense/answer/13402307?hl=en. Read 2026-10-16. -- Content: Original, high-quality, policy-compliant content. Source: https://support.google.com/adsense/answer/9724?hl=en. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://support.google.com/adsense/answer/9724?hl=en. Read 2026-10-16. -- Must connect: Access to the site HTML. Note: Needed to verify and place ad code. Source: https://support.google.com/adsense/answer/9724?hl=en. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://support.google.com/adsense/answer/9724?hl=en. Read 2026-10-16. +- Product: Self-serve contextual display advertising. +- Application or contact route: [https://www.google.com/adsense/start/](https://www.google.com/adsense/start/). +- Recommendation role: **primary**. Default self-serve starting point; official checklist publishes no traffic or site-age number, but evaluates site content and policy compliance. -## Pay +## Official facts -- For AdSense for Content, publishers receive 80% after the advertiser platform fee. Google Ads demand makes the effective share about 68%; shares differ for other products. The USD payment threshold is $100, with thresholds by currency. Payments are monthly, normally issued from the 21st to 26th if there is no hold. Methods vary by country and include check, EFT, SEPA, wire, and PayPal Hyperwallet where available. (Sources: https://support.google.com/adsense/answer/180195?hl=en, https://support.google.com/adsense/answer/1709871?hl=en, https://support.google.com/adsense/answer/7164701?hl=en, and https://support.google.com/adsense/answer/1714397?hl=en, read 2026-10-16.) +Facts below apply to the named program. Missing numeric amounts mean the source did not publish a number. -## Rules +- **Traffic — no numeric gate listed**; period: not stated; scope: site; program: AdSense. Source: [https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk](https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk). Note: Eligibility page does not explicitly promise no minimum. +- **Content — requires original, high-quality, policy-compliant content**; period: ongoing; scope: site; program: AdSense. Source: [https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk](https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk). +- **Applicant age — minimum**: 18 years; period: at application; scope: account holder or guardian arrangement; program: AdSense. Source: [https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk](https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk). +- **Site access — must access/control HTML**; period: verification; scope: site owner; program: AdSense. Source: [https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk](https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk). +- **Signup availability — must live in supported country**; period: application; scope: account holder; program: AdSense. Source: [https://support.google.com/adsense/answer/13402307?hl=en](https://support.google.com/adsense/answer/13402307?hl=en). -- Ad placement must comply with AdSense Program Policies. Public terms do not impose publisher exclusivity. Content restrictions are in the Program Policies. (Sources: https://support.google.com/adsense/answer/48182?hl=en and https://support.google.com/adsense/answer/9724?hl=en, read 2026-10-16.) +## Publisher-reported observations -## Service +Individual reports, not acceptance-rate evidence or revenue forecasts. -- AdSense provides account reporting and policy/help-center support. (Sources: https://support.google.com/adsense/answer/9724?hl=en and https://support.google.com/adsense/, read 2026-10-16.) +- **Date not stated — Unidentified calculator site** (Online calculator/tool). Poster said a three-week-old calculator site was rejected twice. Limits: No traffic or full content-quality context; cannot infer a traffic or age gate. Source: [https://www.reddit.com/r/passive_income/comments/1tyq291](https://www.reddit.com/r/passive_income/comments/1tyq291). -## Logo +## Editorial inference -Logo source: https://www.gstatic.com/images/branding/product/2x/adsense_96dp.png (read 2026-10-16) +### Practical fit + +Useful default for a new or small compliant site because no numeric traffic floor appears in the checklist; approval still depends on site quality and policy review. + +### Estimated range and confidence + +- Traffic range: not estimated; available figures are absent or not comparable enough to support a practical band. +- Revenue range: not estimated. + +- Geography: No public country rule found. +- Site age: No public age minimum found. +- Confidence: **high**. Official eligibility and activation guides give content, age, ownership and review facts but no traffic number. + +### Current-network compatibility + +- Can coexist with some providers subject to Google policies; other provider memberships are not transitive approval. +- May coexist with other providers only within Google ad density, placement and policy rules. +- Mediavine/Journey standing checks and another network's acceptance do not guarantee AdSense approval. + +## Directory-ready corrections and additions + +Proposed complete AdNetworkFacts record, excluding minTraffic. Keep published values with their dates and qualifications. + +### Key numbers + +- **Publisher share:** 80% — For AdSense for Content after advertiser platform fee; about 68% with Google Ads demand. Source: [https://support.google.com/adsense/answer/180195?hl=en](https://support.google.com/adsense/answer/180195?hl=en). +- **Payment minimum:** $100 USD — Equivalent thresholds vary by account currency. Source: [https://support.google.com/adsense/answer/1709871?hl=en](https://support.google.com/adsense/answer/1709871?hl=en). +- **Pay day:** 21st–26th each month — When balance reaches payment threshold and no holds. Source: [https://support.google.com/adsense/answer/7164701?hl=en](https://support.google.com/adsense/answer/7164701?hl=en). + +### Joining and payment + +- **Traffic:** No numeric traffic rule on current eligibility checklist — This page does not promise that no minimum exists. Source: [https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk](https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk). +- **Content:** Original, high-quality content and publisher-policy compliance. Source: [https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk](https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk). +- **Applicant:** 18+, or adult representative; must own/control site HTML and be in a supported signup country. Source: [https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk](https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk). +- **Review:** Usually days; sometimes 2–4 weeks; finish setup within 6 months. Source: [https://support.google.com/adsense/answer/7402256?hl=en-AG](https://support.google.com/adsense/answer/7402256?hl=en-AG). +- Revenue share: 80% after advertiser platform fee for AdSense for Content. +- Payment terms: Monthly; issued 21st–26th after threshold and holds clear. +- Payment threshold: $100 USD or account-currency equivalent. +- Payment methods: Check, EFT, SEPA, Wire, PayPal Hyperwallet where available. + +## Unresolved conflicts and gaps + +- No measured publisher entry example with traffic and successful acceptance found. +- A recent tool-site rejection has no traffic data or detailed review reason. + +## Research attempts and sources + +Attempts are stated explicitly so missing evidence is not mistaken for an unavailable or reviewed source. + +- Reviewed current eligibility, activation, payout, share and country pages. +- Searched first-person low-volume applications; one recent tool-site rejection lacked traffic and review details. +- Did not state that Google guarantees approval without a traffic minimum. + +### Sources checked + +- [AdSense eligibility requirements](https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk) — official; checked 2026-10-22. Supports: content; age; site access; no listed traffic/age gate. +- [AdSense activation](https://support.google.com/adsense/answer/7402256?hl=en-AG) — official; checked 2026-10-22. Supports: review timing and setup window. +- [AdSense revenue share](https://support.google.com/adsense/answer/180195?hl=en) — official; checked 2026-10-22. Supports: 80% after fee and approx. 68% Google Ads demand. +- [Calculator-site rejection report](https://www.reddit.com/r/passive_income/comments/1tyq291) — publisher_forum, published 2026; checked 2026-10-22. Supports: three-week-old site rejected twice; no traffic data. diff --git a/content_docs/ad-networks/research/infolinks.md b/content_docs/ad-networks/research/infolinks.md index ccaf7d7e..8f54a964 100644 --- a/content_docs/ad-networks/research/infolinks.md +++ b/content_docs/ad-networks/research/infolinks.md @@ -1,28 +1,88 @@ -# Infolinks +# infolinks: recommendation research -Checked 2026-10-16. +Checked: 2026-10-22 -## Joining +## Product and application -- Traffic: No minimum pageviews or visitors. Source: https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks. Read 2026-10-16. -- Visitor location: Not public. The eligibility page timed out when opened directly; its official indexed copy was readable in search results. Source checked: https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks. Read 2026-10-16. -- Content: No illegal or offensive content. Source: https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks. Read 2026-10-16. -- Google standing: Not public. The eligibility page timed out when opened directly; its official indexed copy was readable in search results. Source checked: https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks. Read 2026-10-16. -- Must connect: Install the Infolinks script. Source: https://sites0001.infolinks.com/support/integration/how-do-i-integrate-infolinks-into-my-website. Read 2026-10-16. -- Approval time: Usually 48 hours. Source: https://sites0001.infolinks.com/support/account/how-do-i-sign-up-as-an-infolinks-publisher. Read 2026-10-16. +- Product: Supplemental in-text, overlay and native advertising. +- Application or contact route: [https://www.infolinks.com/publishers/](https://www.infolinks.com/publishers/). +- Recommendation role: **supplemental**. All site sizes can apply; no official PV minimum, but every site is reviewed and earnings depend on ad opportunities. -## Pay +## Official facts -- The public agreement gives 70% share for In-Text ads, Net 45 working days after month end, and a $50 minimum. Other format rates and payment minimums vary. Methods listed include ACH, eCheck, Payoneer, PayPal, and Western Union. The displayed agreement was last updated in 2015, so a newer signed agreement should control if different. (Sources: https://sites0001.infolinks.com/service-agreement?email=&name=&url= and https://sites0001.infolinks.com/support/payments/do-i-pay-fees-when-receiving-my-infolinks-payment, read 2026-10-16.) +Facts below apply to the named program. Missing numeric amounts mean the source did not publish a number. -## Rules +- **Traffic — no minimum published**: 0 visitors/pageviews; period: not stated; scope: all sizes subject to review; program: Infolinks. Source: [https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks](https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks). +- **Review timing — usually within**: 48 hours; period: after signup; scope: publisher account; program: Infolinks. Source: [https://sites0001.infolinks.com/support/account/how-do-i-sign-up-as-an-infolinks-publisher](https://sites0001.infolinks.com/support/account/how-do-i-sign-up-as-an-infolinks-publisher). +- **Content — must avoid**; period: ongoing; scope: site; program: Infolinks. Source: [https://sites0001.infolinks.com/service-agreement](https://sites0001.infolinks.com/service-agreement). +- **Prior provider history — agreement contains 24-month prior-termination restriction**; period: prior 24 months; scope: publisher/entities; program: Infolinks. Source: [https://sites0001.infolinks.com/service-agreement](https://sites0001.infolinks.com/service-agreement). Note: Agreement last updated 2015; current help page does not reconfirm this clause. -- The old public agreement states a 30-day trial followed by 12-month renewals and allows termination on one business day's notice. It states restrictions on adult and illegal content. Publisher exclusivity and ad placement rights should be confirmed in current terms. (Source: https://sites0001.infolinks.com/service-agreement?email=&name=&url=, read 2026-10-16.) +## Publisher-reported observations -## Service +Individual reports, not acceptance-rate evidence or revenue forecasts. -- Infolinks provides a Publisher Center reporting interface. Its product page describes customization of ad appearance and volume. (Sources: https://sites0001.infolinks.com/publishers/intext and https://sites0001.infolinks.com/support/account/how-do-i-sign-up-as-an-infolinks-publisher, read 2026-10-16.) +- No reliable dated publisher admission or migration account with useful traffic context was located. See search attempts below. -## Logo +## Editorial inference -Logo source: https://www.infolinks.com/wp-content/themes/infolinks/img/logo.png (read 2026-10-16) +### Practical fit + +Can be shortlisted as a low-bar supplemental experiment because there is no published volume floor, but not as the main network for a publisher expecting meaningful managed-display revenue. + +### Estimated range and confidence + +- Traffic range: not estimated; available figures are absent or not comparable enough to support a practical band. +- Revenue range: not estimated. + +- Geography: No public country rule found. +- Site age: No public age minimum found. +- Confidence: **medium**. Official help covers all publisher sizes and payment choices, but public share terms are from an old agreement and independent reports lack context. + +### Current-network compatibility + +- No confirmed modern coexistence rule; verify the older agreement before combining with another provider. +- Treat as supplemental format. Public policy on coexistence with specific display providers was not confirmed; review current agreement. + +## Directory-ready corrections and additions + +Proposed complete AdNetworkFacts record, excluding minTraffic. Keep published values with their dates and qualifications. + +### Key numbers + +- **Traffic:** No minimum PV or visitor count — Current official support result says all publisher sizes can apply. Source: [https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks](https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks). +- **Payment minimum:** $50 most methods; $100 wire/Western Union — Current payment help; fees vary by route. Source: [https://sites0001.infolinks.com/support/payments/what-are-my-payment-options](https://sites0001.infolinks.com/support/payments/what-are-my-payment-options). +- **Pay timing:** 45 days after month-end — Service agreement says 45 working days; current help says 45 days after month-end—contract is older. Source: [https://sites0001.infolinks.com/service-agreement](https://sites0001.infolinks.com/service-agreement). + +### Joining and payment + +- **Traffic:** No PV/visitor minimum; every site reviewed and may be declined. Source: [https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks](https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks). +- **Review:** Usually within 48 hours. Source: [https://sites0001.infolinks.com/support/account/how-do-i-sign-up-as-an-infolinks-publisher](https://sites0001.infolinks.com/support/account/how-do-i-sign-up-as-an-infolinks-publisher). +- **Content:** No illegal, adult/offensive, hateful or infringing content. Source: [https://sites0001.infolinks.com/service-agreement](https://sites0001.infolinks.com/service-agreement). +- **Integration:** Install Infolinks JavaScript after approval. Source: [https://sites0001.infolinks.com/support/integration/how-do-i-integrate-infolinks-into-my-website](https://sites0001.infolinks.com/support/integration/how-do-i-integrate-infolinks-into-my-website). +- Revenue share: 70% for In-Text ads under 2015 agreement; other format rates vary. +- Payment terms: 45 working days after month-end under 2015 agreement. +- Payment threshold: $50 most methods; $100 wire/Western Union. +- Payment methods: PayPal, Bank wire, eCheck, ACH, Payoneer, Western Union. + +## Unresolved conflicts and gaps + +- Agreement last updated 2015; revenue share and 24-month clause may have changed. +- Review sites contain generic positive/low-earning statements without traffic/niche/context. +- No dated application acceptance story with metrics found. + +## Research attempts and sources + +Attempts are stated explicitly so missing evidence is not mistaken for an unavailable or reviewed source. + +- Read current eligibility, signup, payment and fee help; direct support result surfaced current eligibility language. +- Reviewed publisher agreement; page indicates 2015 update, so terms are qualified as dated. +- Searched Trustpilot/G2 and publisher discussions; no reliable quantified entry example found. + +### Sources checked + +- [Publisher eligibility support](https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks) — official; checked 2026-10-22. Supports: no numeric minimum; review all sites. +- [Publisher signup help](https://sites0001.infolinks.com/support/account/how-do-i-sign-up-as-an-infolinks-publisher) — official; checked 2026-10-22. Supports: short form and 48-hour review. +- [Payment options help](https://sites0001.infolinks.com/support/payments/what-are-my-payment-options) — official; checked 2026-10-22. Supports: method-specific min and schedule. +- [Publisher service agreement](https://sites0001.infolinks.com/service-agreement) — official_terms, published 2015-01-27; checked 2026-10-22. Supports: 70% for In-Text only; other rates vary; older contract language. +- [Publisher review page](https://www.trustpilot.com/review/infolinks.com) — review_site; checked 2026-10-22. Supports: generic impressions; no qualified traffic case. +- [Software reviews](https://www.g2.com/products/infolinks/reviews) — review_site; checked 2026-10-22. Supports: low-earning complaint without site/traffic context. diff --git a/content_docs/ad-networks/research/journey-by-mediavine.md b/content_docs/ad-networks/research/journey-by-mediavine.md index 6f025f55..e28c34f9 100644 --- a/content_docs/ad-networks/research/journey-by-mediavine.md +++ b/content_docs/ad-networks/research/journey-by-mediavine.md @@ -1,28 +1,100 @@ -# Journey by Mediavine +# journey-by-mediavine: recommendation research -Checked 2026-10-16. +Checked: 2026-10-22 -## Joining +## Product and application -- Traffic: More than 1,000 sessions. Note: Monthly. Source: https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine. Read 2026-10-16. -- Content: Original, updated, human-created, brand-safe content. Source: https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine. Read 2026-10-16. -- Google standing: No active AdSense or Ad Exchange issues. Source: https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine. Read 2026-10-16. -- Must connect: Install the Grow plugin. Note: Journey requirement. Source: https://www.journeymv.com/affiliates-faq/. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine. Read 2026-10-16. +- Product: Lower-volume managed ad program and Mediavine growth path. +- Application or contact route: [https://www.journeymv.com/getting-started-with-journey-by-mediavine/](https://www.journeymv.com/getting-started-with-journey-by-mediavine/). +- Recommendation role: **primary**. 1,000 Tier1 sessions in 30 days, 30 days on Grow and at least four months domain history. -## Pay +## Official facts -- Journey-specific publisher share, payment timing, threshold, payment methods, and currency are not public in the reviewed sources. Do not apply Mediavine Official payment terms to Journey. (Sources: https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine and https://www.journeymv.com/affiliates-faq/, read 2026-10-16.) +Facts below apply to the named program. Missing numeric amounts mean the source did not publish a number. -## Rules +- **Sessions — minimum**: 1,000 Tier1 sessions; period: 30 days; scope: site; program: Journey. Source: [https://www.mediavine.com/application-requirements/](https://www.mediavine.com/application-requirements/). +- **Grow — must run**: 30 days; period: before review; scope: site; program: Journey. Source: [https://www.journeymv.com/getting-started-with-journey-by-mediavine/](https://www.journeymv.com/getting-started-with-journey-by-mediavine/). +- **Domain age — minimum**: 4 months; period: at application; scope: domain; program: Journey. Source: [https://www.journeymv.com/getting-started-with-journey-by-mediavine/](https://www.journeymv.com/getting-started-with-journey-by-mediavine/). +- **Google standing — must be in good standing**; period: ongoing; scope: publisher account; program: Journey. Source: [https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine/](https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine/). -- Journey-specific exclusivity, ad placement rules, contract term, and notice are not public in the reviewed sources. (Source: https://www.journeymv.com/affiliates-faq/, read 2026-10-16.) +## Publisher-reported observations -## Service +Individual reports, not acceptance-rate evidence or revenue forecasts. -- Journey uses Grow. Publisher service and reporting terms beyond Grow were not stated in the reviewed public pages. (Source: https://www.journeymv.com/affiliates-faq/, read 2026-10-16.) +- **2024 — Unidentified blog** (Not stated). Traffic: 15000 sessions (month near acceptance). Countries: United States. Poster said Journey accepted after a seven-week review; traffic had risen from 5k sessions in May to 10k in July and 15–17k that month; 25% US and 35% Tier1. Limits: Niche not given; self-reported and above published threshold. Source: [https://www.reddit.com/r/Blogging/comments/1ezlcpk](https://www.reddit.com/r/Blogging/comments/1ezlcpk). +- **2024 — German-language blog** (Not stated). Traffic: 70000 sessions (month at acceptance). Countries: Germany. Poster reported Journey acceptance after about 60 days, after Mediavine Official rejection; said about 90% of traffic was German. Limits: Reported AdSense income before migration, not Journey entry earnings; anecdote is above minimum. Source: [https://www.reddit.com/r/Blogging/comments/1dkzgsl](https://www.reddit.com/r/Blogging/comments/1dkzgsl). +- **2026 — Unidentified site** (Not stated). Traffic: 4400 sessions (month). Poster said the Journey application was in review, then after a unified-form reapplication was rejected quickly for traffic/composition despite 77% Tier1. Limits: Niche and country breakdown absent; self-reported process. Source: [https://www.reddit.com/r/adops/comments/1vn39i3](https://www.reddit.com/r/adops/comments/1vn39i3). +- **2026-09 — Unidentified site** (Not stated). Traffic: 90000 sessions (month). Reported monthly ad revenue: USD 750 (month). Publisher reported September Journey earnings after 90k sessions and over 180k pageviews; earlier daily PV run rate was about 3k. Limits: Publisher-reported single month, niche and country mix not supplied; performance is not a forecast. Source: [https://www.reddit.com/r/adops/comments/1wq2v87](https://www.reddit.com/r/adops/comments/1wq2v87). -## Logo +## Editorial inference -Logo source: https://www.journeymv.com/ (read 2026-10-16) +### Practical fit + +A clear shortlist for small-to-mid content publishers at 1k Tier1 sessions, but review still weighs quality and composition. Sites above this gate can still be rejected. + +### Estimated range and confidence + +- Traffic reference: **1,000–1,000 Tier1 sessions per 30 days**; confidence: high. This is not an admission guarantee. + - Published minimum; not a general expected entry range. + - Basis: [https://www.mediavine.com/application-requirements/](https://www.mediavine.com/application-requirements/). +- Revenue range: not estimated. + +- Geography: No fixed Tier1 share; reported acceptance at 35% Tier1 and rejection at 77% show composition is contextual, not a numeric share rule. +- Site age: Four months domain history and 30 days Grow required. +- Confidence: **medium**. Official gates are clear. First-person accounts show acceptance above threshold at low US mix, a contradictory rejection despite high Tier1 share, and one earnings snapshot. + +### Current-network compatibility + +- Current network membership is only a soft comparable signal; Official and Journey criteria differ. +- Journey is a growth-stage Mediavine program; exact ad-stack overlap and migration conditions depend on onboarding. +- A Journey acceptance does not establish Official eligibility. + +## Directory-ready corrections and additions + +Proposed complete AdNetworkFacts record, excluding minTraffic. Keep published values with their dates and qualifications. + +### Key numbers + +- **Sessions to apply:** 1,000 Tier 1 sessions in 30 days — Current Mediavine application requirement for Journey. Source: [https://www.mediavine.com/application-requirements/](https://www.mediavine.com/application-requirements/). +- **Share:** 70% — Journey publisher share. Source: [https://www.journeymv.com/getting-started-with-journey-by-mediavine/](https://www.journeymv.com/getting-started-with-journey-by-mediavine/). +- **Pay day:** Net 65 — Journey schedule. Source: [https://www.journeymv.com/getting-started-with-journey-by-mediavine/](https://www.journeymv.com/getting-started-with-journey-by-mediavine/). + +### Joining and payment + +- **Traffic:** At least 1k Tier 1 sessions in 30 days. Source: [https://www.mediavine.com/application-requirements/](https://www.mediavine.com/application-requirements/). +- **Setup:** Run Grow for at least 30 days; GA4 is optional. Source: [https://www.journeymv.com/getting-started-with-journey-by-mediavine/](https://www.journeymv.com/getting-started-with-journey-by-mediavine/). +- **Site age:** The April 2024 getting-started guide describes four months of domain history for ad partners; confirm current application. This is dated guidance, not a newly established 2026 hard rule. Source: [https://www.journeymv.com/getting-started-with-journey-by-mediavine/](https://www.journeymv.com/getting-started-with-journey-by-mediavine/). +- **Review:** Original, human, brand-safe audience; Google account in good standing. Source: [https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine/](https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine/). +- Revenue share: 70%. +- Payment terms: Net 65. +- Payment threshold: Not public. +- Payment methods: Not public. +- Join summary: 1,000 Tier 1 sessions in 30 days. + +## Unresolved conflicts and gaps + +- A recent applicant report cites changing unified-form routing; official page remains eligibility authority. +- No accepted publisher case exactly at 1,000 sessions found. +- Earnings example is not a stable forecast and lacks niche/geography. + +## Research attempts and sources + +Attempts are stated explicitly so missing evidence is not mistaken for an unavailable or reviewed source. + +- Reviewed current application, setup, domain-age and quality guidance; verified 70% share and Net65 from Journey's page. +- Searched dated application and revenue reports across Reddit and publisher blogs; recorded distinct acceptance, rejection and earnings examples with missing fields. +- Kept reported Tier1 mix as observations, not a derived acceptance rule. + +### Sources checked + +- [Mediavine application requirements](https://www.mediavine.com/application-requirements/) — official; checked 2026-10-22. Supports: 1k Tier1 sessions for Journey. +- [Journey setup and getting started](https://www.journeymv.com/getting-started-with-journey-by-mediavine/) — official; checked 2026-10-22. Supports: Grow 30 days; 4-month domain history; 70% share and Net65. +- [Approval criteria](https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine/) — official; checked 2026-10-22. Supports: content/Google standing/quality. +- [Journey acceptance report](https://www.reddit.com/r/Blogging/comments/1ezlcpk) — publisher_forum, published 2024; checked 2026-10-22. Supports: 15–17k sessions; 35% Tier1; accepted after seven weeks. +- [German Journey report](https://www.reddit.com/r/Blogging/comments/1dkzgsl) — publisher_forum, published 2024; checked 2026-10-22. Supports: 70k sessions; 90% Germany; accepted after about 60 days. +- [Journey application routing report](https://www.reddit.com/r/adops/comments/1vn39i3) — publisher_forum, published 2026; checked 2026-10-22. Supports: 4.4k sessions, 77% Tier1 and reported rejection. +- [Journey earnings report](https://www.reddit.com/r/adops/comments/1wq2v87) — publisher_forum, published 2026-09; checked 2026-10-22. Supports: 90k sessions, 180k+ PV and $750 reported. + +## Source-date clarification + +The getting-started guide is dated April 15, 2024. Its four-month paragraph describes an expected ad-partner condition. The current application page does not restate it. Keep the dated guidance as context and confirm it with Journey; do not call it a newly verified 2026 admission gate. diff --git a/content_docs/ad-networks/research/media-net.md b/content_docs/ad-networks/research/media-net.md index 519c47bc..11176ccb 100644 --- a/content_docs/ad-networks/research/media-net.md +++ b/content_docs/ad-networks/research/media-net.md @@ -1,28 +1,87 @@ -# Media.net +# media-net: recommendation research -Checked 2026-10-16. +Checked: 2026-10-22 -## Joining +## Product and application -- Traffic: Not public. The reviewed official pages do not state this rule. Source checked: https://www.media.net/legal/inventorypolicies/. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://www.media.net/legal/inventorypolicies/. Read 2026-10-16. -- Content: Original content; prohibited topics are excluded. Source: https://www.media.net/legal/inventorypolicies/. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://www.media.net/legal/inventorypolicies/. Read 2026-10-16. -- Must connect: Publish an authorized ads.txt file. Source: https://www.media.net/legal/inventorypolicies/. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://www.media.net/legal/inventorypolicies/. Read 2026-10-16. +- Product: Contextual display, native/video demand and managed Prebid service. +- Application or contact route: [https://www.media.net/publishers](https://www.media.net/publishers). +- Recommendation role: **infrastructure**. Managed display/Prebid demand; no public traffic number, but the policy expects mostly organic traffic and compliant inventory. -## Pay +## Official facts -- Payments are monthly and Net 30, based on valid click-through revenue received less applicable commissions and costs. Share rate, payment minimum, methods, and currency are not stated in the reviewed agreement. (Source: https://www.media.net/legal/, read 2026-10-16.) +Facts below apply to the named program. Missing numeric amounts mean the source did not publish a number. -## Rules +- **Traffic source — primarily organic**; period: ongoing; scope: site traffic; program: Media.net. Source: [https://www.media.net/legal/inventorypolicies/](https://www.media.net/legal/inventorypolicies/). +- **Traffic volume — not published**; period: not stated; scope: publisher site; program: Media.net. Source: [https://www.media.net/publishers](https://www.media.net/publishers). +- **Content — must be original and policy-compliant**; period: ongoing; scope: site; program: Media.net. Source: [https://www.media.net/legal/inventorypolicies/](https://www.media.net/legal/inventorypolicies/). +- **Ads.txt — authorized file required**; period: ongoing; scope: site/app; program: Media.net. Source: [https://www.media.net/legal/inventorypolicies/](https://www.media.net/legal/inventorypolicies/). +- **Exclusivity — no alternative service showing substantially similar ads unless authorized**; period: ongoing; scope: same inventory; program: Media.net. Source: [https://www.media.net/legal/](https://www.media.net/legal/). -- Publisher agrees to protect Media.net confidential information. The reviewed agreement does not state a publisher exclusivity requirement, placement-control details, or fixed contract term. It allows suspension or termination for policy issues. (Sources: https://www.media.net/legal/ and https://www.media.net/legal/inventorypolicies/, read 2026-10-16.) +## Publisher-reported observations -## Service +Individual reports, not acceptance-rate evidence or revenue forecasts. -- The reviewed publisher terms describe program operation but do not set public dashboard, reporting, or support service levels. (Source: https://www.media.net/legal/, read 2026-10-16.) +- **2023 — Unidentified publisher** (Not stated). Poster said they used Media.net across sites and had gone about six months without support responses. Limits: No traffic, niche, geography or earnings; service report only. Source: [https://www.reddit.com/r/adops/comments/15ql4jb](https://www.reddit.com/r/adops/comments/15ql4jb). +- **2019 — Unidentified publisher** (Not stated). Poster described Media.net as the lowest-performing bidder among their header-bidding partners. Limits: Old, subjective, no site metrics. Source: [https://www.reddit.com/r/adops/comments/ddntw5](https://www.reddit.com/r/adops/comments/ddntw5). -## Logo +## Editorial inference -Logo source: https://www.media.net/ (read 2026-10-16) +### Practical fit + +Consider for publishers with mostly organic traffic wanting contextual display/native/video demand and a managed stack. Low confidence for small sites because acceptance and yield criteria are not public. + +### Estimated range and confidence + +- Traffic range: not estimated; available figures are absent or not comparable enough to support a practical band. +- Revenue range: not estimated. + +- Geography: No public country rule found. +- Site age: No public age minimum found. +- Confidence: **low**. Current policy and agreement establish organic source, content, ads.txt and competition clauses. Independent reports are old and lack scale. + +### Current-network compatibility + +- Agreement restricts substantially similar competing ads; do not assume it can supplement a current managed display network. +- Current terms prohibit a competing service with substantially similar ads; treat same-inventory use as restricted unless Media.net approves in writing. + +## Directory-ready corrections and additions + +Proposed complete AdNetworkFacts record, excluding minTraffic. Keep published values with their dates and qualifications. + +### Key numbers + +- **Pay day:** Net 30 — Current publisher agreement says monthly payment for collected click-through revenue. Source: [https://www.media.net/legal/](https://www.media.net/legal/). + +### Joining and payment + +- **Traffic source:** Primarily organic traffic; no public numeric floor. Source: [https://www.media.net/legal/inventorypolicies/](https://www.media.net/legal/inventorypolicies/). +- **Content:** Original, high-quality, navigable; restricted content excluded. Source: [https://www.media.net/legal/inventorypolicies/](https://www.media.net/legal/inventorypolicies/). +- **Ads.txt:** Authorized ads.txt/app-ads.txt required. Source: [https://www.media.net/legal/inventorypolicies/](https://www.media.net/legal/inventorypolicies/). +- **Payment:** Monthly Net30 based on collected click-through revenue less costs/commissions. Source: [https://www.media.net/legal/](https://www.media.net/legal/). +- Revenue share: Not public. +- Payment terms: Net 30 monthly on collected click-through revenue. +- Payment threshold: Not public. +- Payment methods: Not public. + +## Unresolved conflicts and gaps + +- No numeric traffic/revenue gate or geographies published. +- Payment contract says Net30, but no threshold/method found. +- Older agreement clauses and specific prior-provider history need confirmation in current publisher contract. + +## Research attempts and sources + +Attempts are stated explicitly so missing evidence is not mistaken for an unavailable or reviewed source. + +- Reviewed current publisher overview, inventory policy and agreement. +- Searched first-person publisher discussions; found two old subjective reports without traffic or niche. +- Did not infer country or traffic criteria from testimonials. + +### Sources checked + +- [Media.net publisher page](https://www.media.net/publishers) — official; checked 2026-10-22. Supports: managed Prebid and demand product. +- [Inventory policies](https://www.media.net/legal/inventorypolicies/) — official; checked 2026-10-22. Supports: organic traffic; content; ads.txt. +- [Publisher agreement](https://www.media.net/legal/) — official; checked 2026-10-22. Supports: Net30; no minimum revenue guarantee; substantially similar competing service restriction. +- [Publisher support complaint](https://www.reddit.com/r/adops/comments/15ql4jb) — publisher_forum, published 2023; checked 2026-10-22. Supports: six months without support response; no size. +- [Header-bidding comparison](https://www.reddit.com/r/adops/comments/ddntw5) — publisher_forum, published 2019; checked 2026-10-22. Supports: subjective lowest-performance report. diff --git a/content_docs/ad-networks/research/mediavine.md b/content_docs/ad-networks/research/mediavine.md index 7d7a00a0..941e833e 100644 --- a/content_docs/ad-networks/research/mediavine.md +++ b/content_docs/ad-networks/research/mediavine.md @@ -1,29 +1,96 @@ -# Mediavine +# mediavine: recommendation research -Checked 2026-10-16. +Checked: 2026-10-22 -## Joining +## Product and application -- Traffic: no traffic minimum listed. The official requirements page sets a $5,000 yearly ad revenue minimum instead of a traffic rule. Source checked: https://help.mediavine.com/mediavine-official. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://help.mediavine.com/mediavine-official. Read 2026-10-16. -- Content: Original, quality, evergreen content. Source: https://help.mediavine.com/mediavine-official. Read 2026-10-16. -- Google standing: No active AdSense ban. Note: You do not need prior AdSense use. Source: https://help.mediavine.com/mediavine-official. Read 2026-10-16. -- Must connect: Not public. The reviewed official pages do not state this rule. Source checked: https://help.mediavine.com/mediavine-official. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://help.mediavine.com/mediavine-official. Read 2026-10-16. -- Ad revenue: $5,000 a year. Note: Minimum annual ad revenue. Source: https://help.mediavine.com/mediavine-official. Read 2026-10-16. +- Product: Managed display ad network with multiple publisher growth tiers. +- Application or contact route: [https://www.mediavine.com/application-requirements/](https://www.mediavine.com/application-requirements/). +- Recommendation role: **primary**. Official requires $5k ad revenue from the prior calendar year. Current-month earnings can estimate opportunity, but cannot prove this exact requirement. -## Pay +## Official facts -- Mediavine Official states a 75% publisher share. Payments are Net 65 on the 5th or first business day after it. Most methods have a $100 threshold; international ACH is $200. Methods include PayPal, domestic and international ACH, and US and international wire. Supported currency depends on method and setup. (Sources: https://help.mediavine.com/mediavine-official, https://help.mediavine.com/mediavine-payment-faq, and https://help.mediavine.com/mediavine-payment-methods, read 2026-10-16.) +Facts below apply to the named program. Missing numeric amounts mean the source did not publish a number. -## Rules +- **Site ad revenue — minimum**: 5,000 USD; period: previous calendar year; scope: site; program: Official. Source: [https://help.mediavine.com/programs-and-the-publisher-path-to-growth](https://help.mediavine.com/programs-and-the-publisher-path-to-growth). Note: Not last month or trailing 12 months. +- **Content — must be original, audience-first, human and brand-safe**; period: ongoing; scope: site; program: Official. Source: [https://help.mediavine.com/mediavine-official](https://help.mediavine.com/mediavine-official). +- **Google standing — must be in good standing**; period: ongoing; scope: account; program: Official. Source: [https://help.mediavine.com/mediavine-official](https://help.mediavine.com/mediavine-official). +- **Traffic source/geography — reviewed; no fixed share published**; period: review; scope: site; program: Official. Source: [https://help.mediavine.com/mediavine-official](https://help.mediavine.com/mediavine-official). -- Mediavine says there is no long-term contract. Publisher controls include ad settings and controls in the dashboard. Public content and placement rules are in its publisher help center. (Sources: https://help.mediavine.com/mediavine-official and https://help.mediavine.com/, read 2026-10-16.) +## Publisher-reported observations -## Service +Individual reports, not acceptance-rate evidence or revenue forecasts. -- The dashboard reports traffic source, country, device, page-level, gross/net, and ad-unit performance. Support is available seven days a week through its help center and publisher community. Tools include Grow and ad management settings. (Source: https://help.mediavine.com/mediavine-official, read 2026-10-16.) +- **2026 — Unidentified publisher** (Not stated). Poster said they expected Official eligibility based on prior-year earnings but application path routed them to Journey; they were 45 days into Journey. Limits: Anonymous; exact revenue and site quality/country data not provided; app routing may have changed. Source: [https://www.reddit.com/r/adops/comments/1wz7cw6](https://www.reddit.com/r/adops/comments/1wz7cw6). +- **2026 — Norwegian local site** (Local popular site; niche not stated). Traffic: 12046 pageviews (first 5 days after network acceptance). Countries: Norway. Poster reported acceptance to a Mediavine-branded program and $41.47 revenue from those first five days; the program tier (Official vs Journey) was not specified. Limits: Very early five-day result and program unspecified; not a revenue forecast or evidence against the Official prior-year gate. Source: [https://www.reddit.com/r/Blogging/comments/1s7kf5e](https://www.reddit.com/r/Blogging/comments/1s7kf5e). +- **2026 — Unidentified existing publisher** (Not stated). Traffic: 1600000 monthly users (reported during application discussion). Publisher described repeated application declines and a 60-day reapply wait despite later traffic growth. Limits: Exact application target tier, niche, geography and prior-year ad revenue not established. Source: [https://www.reddit.com/r/adops/comments/1xb1r9c](https://www.reddit.com/r/adops/comments/1xb1r9c). -## Logo +## Editorial inference -Logo source: https://www.mediavine.com/wp-content/uploads/2025/11/Mediavine-Logo-Black.svg (read 2026-10-16) +### Practical fit + +Shortlist for content publishers that can document $5k site ad revenue from the previous calendar year and pass quality review. Last month's revenue is only a planning estimate and cannot satisfy the exact criterion. + +### Estimated range and confidence + +- Traffic range: not estimated; available figures are absent or not comparable enough to support a practical band. +- Revenue reference: **5,000–5,000 USD site ad revenue per previous calendar year**; confidence: high. + - Exact Official gate, not monthly revenue. + - Basis: [https://help.mediavine.com/programs-and-the-publisher-path-to-growth](https://help.mediavine.com/programs-and-the-publisher-path-to-growth). + +- Geography: No fixed share; traffic source and geography are reviewed. +- Site age: No public age minimum found. +- Confidence: **high**. Current official Publisher Path specifies the previous calendar year, not last month or rolling 12 months. Reddit reports show routing and quality review can add discretion. + +### Current-network compatibility + +- Journey acceptance is a separate path and does not prove Official eligibility. +- Journey is a separate lower-volume program and not proof of Official eligibility. +- Official rate tiers apply to new 2026 sites; legacy agreements can differ. + +## Directory-ready corrections and additions + +Proposed complete AdNetworkFacts record, excluding minTraffic. Keep published values with their dates and qualifications. + +### Key numbers + +- **Official revenue gate:** $5,000 — Site ad revenue in the previous calendar year; not last month or trailing 12 months. Source: [https://help.mediavine.com/programs-and-the-publisher-path-to-growth](https://help.mediavine.com/programs-and-the-publisher-path-to-growth). +- **Official share:** 75% — For new Official sites in 2026; Select/Signature/Premiere tiers are higher and legacy terms differ. Source: [https://help.mediavine.com/revenue-share](https://help.mediavine.com/revenue-share). +- **Pay day:** Net 65 — Processed from month end. Source: [https://help.mediavine.com/when-am-i-getting-paid-0](https://help.mediavine.com/when-am-i-getting-paid-0). + +### Joining and payment + +- **Revenue:** At least $5k site ad revenue in previous calendar year. Source: [https://help.mediavine.com/programs-and-the-publisher-path-to-growth](https://help.mediavine.com/programs-and-the-publisher-path-to-growth). +- **Content:** Original, audience-first, human and brand-safe; traffic sources and demographics reviewed. Source: [https://help.mediavine.com/mediavine-official](https://help.mediavine.com/mediavine-official). +- **Google standing:** Good standing with AdSense and Ad Exchange; no active policy issues. Source: [https://help.mediavine.com/mediavine-official](https://help.mediavine.com/mediavine-official). +- **Traffic:** No separate public PV/session gate for Official; revenue rule controls. Source: [https://help.mediavine.com/programs-and-the-publisher-path-to-growth](https://help.mediavine.com/programs-and-the-publisher-path-to-growth). +- **Application:** Provide analytics and allow site review; exact verification may vary. Source: [https://prod.mediavine.com/blog/mediavine-application-process-faq/](https://prod.mediavine.com/blog/mediavine-application-process-faq/). +- Revenue share: 75% for new Official sites in 2026; 80% Select, 85% Signature, 90% Premiere/Premiere Plus; legacy differs. +- Payment terms: Net 65 from month end; processed first business day. +- Payment threshold: $100 most methods; $200 eCheck/local transfer. +- Payment methods: PayPal, Domestic ACH, Wise, US wire, eCheck/local bank transfer, International wire. +- Join summary: $5,000 in site ad revenue in the prior calendar year. + +## Unresolved conflicts and gaps + +- One recent accepted case did not specify Official versus Journey. +- Anonymous application reports do not expose review inputs; they cannot establish an acceptance rate. +- Do not use last-month earnings as an exact substitute for prior-year total. + +## Research attempts and sources + +Attempts are stated explicitly so missing evidence is not mistaken for an unavailable or reviewed source. + +- Reviewed current Publisher Path, Official criteria, 2026 share tiers and payment terms. +- Searched recent publisher application/rejection reports; found one Official-to-Journey routing complaint and one acceptance report where program tier was unclear. +- Did not infer the Official gate from last-month revenue or from Journey entry. + +### Sources checked + +- [Programs and Publisher Path](https://help.mediavine.com/programs-and-the-publisher-path-to-growth) — official; checked 2026-10-22. Supports: $5k based on previous calendar year. +- [Mediavine Official criteria](https://help.mediavine.com/mediavine-official) — official; checked 2026-10-22. Supports: content and Google standing. +- [Revenue share](https://help.mediavine.com/revenue-share) — official; checked 2026-10-22. Supports: new 2026 tier shares; legacy differs. +- [Payment timing](https://help.mediavine.com/when-am-i-getting-paid-0) — official; checked 2026-10-22. Supports: Net65. +- [Official application routing discussion](https://www.reddit.com/r/adops/comments/1wz7cw6) — publisher_forum, published 2026; checked 2026-10-22. Supports: poster claimed previous-year revenue above $5k and was routed to Journey. +- [New Mediavine-branded account start](https://www.reddit.com/r/Blogging/comments/1s7kf5e) — publisher_forum, published 2026; checked 2026-10-22. Supports: Norway site and first five-day results; program tier unclear. +- [Publisher reapplication complaint](https://www.reddit.com/r/adops/comments/1xb1r9c) — publisher_forum, published 2026-10-21; checked 2026-10-22. Supports: 1.6m monthly users and repeated declines; tier/niche unclear. diff --git a/content_docs/ad-networks/research/mgid.md b/content_docs/ad-networks/research/mgid.md index 099c451d..ae4d97e9 100644 --- a/content_docs/ad-networks/research/mgid.md +++ b/content_docs/ad-networks/research/mgid.md @@ -1,28 +1,90 @@ -# MGID +# mgid: recommendation research -Checked 2026-10-16. +Checked: 2026-10-22 -## Joining +## Product and application -- Traffic: Not public. The reviewed official pages do not state this rule. Source checked: https://www.mgid.com/services/publishers-tos. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://www.mgid.com/services/publishers-tos. Read 2026-10-16. -- Content: No adult, illegal, hateful, or infringing content. Source: https://www.mgid.com/services/publishers-tos. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://www.mgid.com/services/publishers-tos. Read 2026-10-16. -- Must connect: Install MGID ad units and code. Source: https://www.mgid.com/services/publishers-tos. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://www.mgid.com/services/publishers-tos. Read 2026-10-16. +- Product: Native advertising and recommendation widget network. +- Application or contact route: [https://www.mgid.com/publishers](https://www.mgid.com/publishers). +- Recommendation role: **supplemental**. Published gate is 3,000 daily unique visitors OR 90,000 monthly visitors, plus at least 10 current articles. -## Pay +## Official facts -- A regional MGID publisher offer lists 65% share, Net 30, and method-specific payout minimums from $50 to $1,000. The current Publisher Terms say revenue is subject to the account/order terms and may be adjusted. Treat the regional offer as an offer, not a universal rate; the signed order controls. (Sources: https://pr.mgid.com/monetize and https://www.mgid.com/services/publishers-tos, read 2026-10-16.) +Facts below apply to the named program. Missing numeric amounts mean the source did not publish a number. -## Rules +- **Daily unique visitors — minimum**: 3,000 unique visitors; period: day; scope: site; program: MGID. Source: [https://help.mgid.com/publishers-general-information](https://help.mgid.com/publishers-general-information). +- **Monthly visitors — alternative minimum**: 90,000 visitors; period: month; scope: site; program: MGID. Source: [https://help.mgid.com/publishers-general-information](https://help.mgid.com/publishers-general-information). +- **Current articles — minimum**: 10 articles; period: current; scope: site; program: MGID. Source: [https://help.mgid.com/publishers-general-information](https://help.mgid.com/publishers-general-information). +- **Content — must exclude**; period: ongoing; scope: site; program: MGID. Source: [https://help.mgid.com/publishers-general-information](https://help.mgid.com/publishers-general-information). -- The terms address invalid traffic, content/placement visibility, and permitted use. They do not publish one universal exclusivity or contract-length rule. A 40/60 split mentioned in the terms applies to an anti-adblock add-on, not the general service. (Source: https://www.mgid.com/services/publishers-tos, read 2026-10-16.) +## Publisher-reported observations -## Service +Individual reports, not acceptance-rate evidence or revenue forecasts. -- MGID's regional offer describes a dedicated account manager and round-the-clock support. Exact dashboard/reporting service levels are not public in that offer. (Source: https://pr.mgid.com/monetize, read 2026-10-16.) +- **2024 — Unidentified publisher** (Not stated). Traffic: 287000 views/impressions (poster wording unclear) (March). Reported monthly ad revenue: 261. Poster reported about $261 earnings for 287k March views/impressions. Limits: Traffic unit is ambiguous; no niche/geography; not a traffic-entry case. Source: [https://www.reddit.com/r/adops/comments/1bt3vnt](https://www.reddit.com/r/adops/comments/1bt3vnt). +- **2026 — Unidentified web app** (Web app). Traffic: 20000 monthly active users (20k–30k). Poster asked whether MGID was suitable; no onboarding result. Limits: No application or publisher outcome. Source: [https://www.reddit.com/r/adops/comments/1vkueiv](https://www.reddit.com/r/adops/comments/1vkueiv). -## Logo +## Editorial inference -Logo source: https://www.mgid.com/ (read 2026-10-16) +### Practical fit + +A measurable supplemental shortlist for content sites with at least 3k daily uniques or 90k monthly visitors and 10 current articles. Do not substitute pageviews or sessions for the published visitor metric. + +### Estimated range and confidence + +- Traffic reference: **90,000–90,000 visitors per month**; confidence: high. This is not an admission guarantee. + - Alternative to 3k unique visitors per day. + - Basis: [https://help.mgid.com/publishers-general-information](https://help.mgid.com/publishers-general-information). +- Revenue range: not estimated. + +- Geography: Global; support materials cite 70+ languages and 200+ countries. +- Site age: No public age minimum found. +- Confidence: **high**. Current official help is clear on alternatives, article count, content exclusions and review time; revenue anecdote has ambiguous traffic unit. + +### Current-network compatibility + +- Official materials say AdSense can be used alongside MGID; current terms/placements still control. +- Official publisher materials allow use with AdSense; placement and ad-density rules still apply. Native unit is supplemental to display demand. + +## Directory-ready corrections and additions + +Proposed complete AdNetworkFacts record, excluding minTraffic. Keep published values with their dates and qualifications. + +### Key numbers + +- **Traffic:** 3,000 unique visitors daily OR 90,000 monthly visitors — Official publisher help lists either route. Source: [https://help.mgid.com/publishers-general-information](https://help.mgid.com/publishers-general-information). +- **Publisher share:** 65% in Brazil offer — Offer-specific; current Insertion Order controls global terms. Source: [https://pr.mgid.com/monetize](https://pr.mgid.com/monetize). +- **Payment minimum:** $50–$1,000 — Method-specific in Brazil offer; not a universal threshold. Source: [https://pr.mgid.com/monetize](https://pr.mgid.com/monetize). + +### Joining and payment + +- **Traffic:** 3,000 daily unique visitors OR 90,000 monthly visitors. Source: [https://help.mgid.com/publishers-general-information](https://help.mgid.com/publishers-general-information). +- **Content:** 10 current articles; original, policy compliant, no adult/torrent/redirect/low-info content. Source: [https://help.mgid.com/publishers-general-information](https://help.mgid.com/publishers-general-information). +- **Geography:** No traffic-source/country limitation in help; social visitors accepted; 70+ languages/200+ countries. Source: [https://help.mgid.com/publishers-general-information](https://help.mgid.com/publishers-general-information). +- **Review:** Usually email response within 24 hours; weekend to next business day. Source: [https://help.mgid.com/publishers-general-information](https://help.mgid.com/publishers-general-information). +- Revenue share: 65% in Brazil offer; current insertion order controls. +- Payment terms: Net30 post-payment in Brazil offer; current insertion order controls. +- Payment threshold: Offer-specific: $50 Paymaster24; $100 PayPal/Tipalti; $1,000 ACH/international transfer. +- Payment methods: Paymaster24, PayPal, Tipalti, ACH, International transfer. + +## Unresolved conflicts and gaps + +- Payout/share figures from public Brazil offer are not universal; signed IO governs. +- No accepted entry example with exact traffic and niche found. +- Do not convert ambiguous views/impressions into users. + +## Research attempts and sources + +Attempts are stated explicitly so missing evidence is not mistaken for an unavailable or reviewed source. + +- Checked current publisher help, July 2026 terms, global publisher page and Brazil offer. +- Searched first-person publisher outcomes; found one earnings claim with ambiguous metric and one app inquiry without outcome. +- Kept official visitor units separate from PV/session/MAU. + +### Sources checked + +- [Publisher general information](https://help.mgid.com/publishers-general-information) — official; checked 2026-10-22. Supports: 3k daily uniques OR 90k monthly visitors; 10 articles; geography/language and content rules. +- [Publisher terms](https://www.mgid.com/services/publishers-tos) — official_terms, published 2026-07-29; checked 2026-10-22. Supports: insertion order controls conflicting terms. +- [Brazil publisher offer](https://pr.mgid.com/monetize) — official_offer; checked 2026-10-22. Supports: 65% share, Net30, method thresholds are offer-specific. +- [Publisher revenue question](https://www.reddit.com/r/adops/comments/1bt3vnt) — publisher_forum, published 2024; checked 2026-10-22. Supports: $261 for ambiguous 287k views/impressions. +- [Web app inquiry](https://www.reddit.com/r/adops/comments/1vkueiv) — publisher_forum, published 2026; checked 2026-10-22. Supports: 20–30k monthly active users but no application result. diff --git a/content_docs/ad-networks/research/monetizemore-pubguru.md b/content_docs/ad-networks/research/monetizemore-pubguru.md index 5a20d8ed..4a396071 100644 --- a/content_docs/ad-networks/research/monetizemore-pubguru.md +++ b/content_docs/ad-networks/research/monetizemore-pubguru.md @@ -1,29 +1,89 @@ -# MonetizeMore / PubGuru +# monetizemore-pubguru: recommendation research -Checked 2026-10-16. +Checked: 2026-10-22 -## Joining +## Product and application -- Traffic: 2,000,000 pageviews. Note: Monthly, an alternative to the revenue threshold. Source: https://www.monetizemore.com/solutions/pubguru-premium/. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://www.monetizemore.com/solutions/pubguru-premium/. Read 2026-10-16. -- Content: Not public. The reviewed official pages do not state this rule. Source checked: https://www.monetizemore.com/solutions/pubguru-premium/. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://www.monetizemore.com/solutions/pubguru-premium/. Read 2026-10-16. -- Must connect: Not public. The reviewed official pages do not state this rule. Source checked: https://www.monetizemore.com/solutions/pubguru-premium/. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://www.monetizemore.com/solutions/pubguru-premium/. Read 2026-10-16. -- Ad revenue: $5,000 a month. Note: Alternative to the 2 million monthly pageview threshold. Source: https://www.monetizemore.com/solutions/pubguru-premium/. Read 2026-10-16. +- Product: Managed ad optimization and header-bidding service (PubGuru Premium). +- Application or contact route: [https://www.monetizemore.com/solutions/pubguru-premium/](https://www.monetizemore.com/solutions/pubguru-premium/). +- Recommendation role: **infrastructure**. Premium has explicit alternative gates: $5k monthly ad revenue OR 2m monthly PV. This is for PubGuru Premium, not every product. -## Pay +## Official facts -- Share rate, payment schedule, threshold, payment methods, and currency are not public in the reviewed Premium page. A separate Traffic Cop agreement has product-specific payment language and should not be assumed to cover PubGuru. (Sources: https://www.monetizemore.com/solutions/pubguru-premium/ and https://www.monetizemore.com/traffic-cop-standard-terms-conditions/, read 2026-10-16.) +Facts below apply to the named program. Missing numeric amounts mean the source did not publish a number. -## Rules +- **Monthly ad revenue — minimum OR PV alternative**: 5,000 USD; period: month; scope: publisher; program: PubGuru Premium. Source: [https://www.monetizemore.com/solutions/pubguru-premium/](https://www.monetizemore.com/solutions/pubguru-premium/). +- **Monthly pageviews — minimum OR revenue alternative**: 2,000,000 pageviews; period: month; scope: publisher; program: PubGuru Premium. Source: [https://www.monetizemore.com/solutions/pubguru-premium/](https://www.monetizemore.com/solutions/pubguru-premium/). +- **Revenue share — custom**; period: contract; scope: publisher; program: PubGuru. Source: [https://www.monetizemore.com/frequently-asked-questions/](https://www.monetizemore.com/frequently-asked-questions/). -- PubGuru Premium terms, publisher exclusivity, placement restrictions, and notice are not public on its product page. (Source: https://www.monetizemore.com/solutions/pubguru-premium/, read 2026-10-16.) +## Publisher-reported observations -## Service +Individual reports, not acceptance-rate evidence or revenue forecasts. -- Premium includes custom pricing floors, match-rate automation, smart refresh, A/B testing, AdBlock recovery, premium demand, Open Bidding, ads.txt management, and a Partner Success Squad with onboarding, success, and solutions roles. PubGuru Analytics supports custom reports and revenue discrepancy checks. (Sources: https://www.monetizemore.com/solutions/pubguru-premium/ and https://www.monetizemore.com/blog/how-1000-publishers-maximize-ad-revenue-with-pubgurus-real-time-reports/, read 2026-10-16.) +- **Date not stated — European multi-site publisher / Publab** (Multi-site publishing portfolio). Traffic: 100000000 monthly visitors (reported at scale). Reported monthly ad revenue: EUR 300000 (monthly). Countries: Europe. Vendor case describes a portfolio with 20+ sites and more than 100m monthly visitors and reports revenue growth after PubGuru. Limits: Vendor case study, not independent; very large portfolio and not entry example. Source: [https://www.monetizemore.com/case-study/if-publab-can-5x-their-ad-revenue-using-pubguru-so-can-you/](https://www.monetizemore.com/case-study/if-publab-can-5x-their-ad-revenue-using-pubguru-so-can-you/). +- **2019-2021 — Panlasang Pinoy** (Food/recipe). Traffic: 53500000 pageviews (2019; 88.7m in 2020 and 70.5m in 2021). Vendor case says managed setup increased net ad revenue versus AdSense-only baseline. Limits: Historical vendor case, not a typical result or application threshold. Source: [https://www.monetizemore.com/case-study/200-increase-from-adsense-only-setups-with-panlasangpinoy/](https://www.monetizemore.com/case-study/200-increase-from-adsense-only-setups-with-panlasangpinoy/). -## Logo +## Editorial inference -Logo source: https://www.monetizemore.com/wp-content/uploads/2020/02/Logo.png (read 2026-10-16) +### Practical fit + +Shortlist when a publisher can verify either 2m monthly pageviews or $5k monthly ad revenue and needs managed yield optimization. A solo blog below both is not a PubGuru Premium fit. + +### Estimated range and confidence + +- Traffic reference: **2,000,000–2,000,000 pageviews per month**; confidence: high. This is not an admission guarantee. + - Alternative qualifying route is $5k monthly ad revenue. + - Basis: [https://www.monetizemore.com/solutions/pubguru-premium/](https://www.monetizemore.com/solutions/pubguru-premium/). +- Revenue reference: **5,000–5,000 USD ad revenue per month**; confidence: high. + - Premium alternative to 2m monthly PV. + - Basis: [https://www.monetizemore.com/solutions/pubguru-premium/](https://www.monetizemore.com/solutions/pubguru-premium/). + +- Geography: No public country rule found. +- Site age: No public age minimum found. +- Confidence: **high**. Current PubGuru Premium page explicitly publishes both thresholds. Case studies confirm very large publisher profile but are vendor-reported. + +### Current-network compatibility + +- Use of GAM or other demand partners can aid setup; not transitive proof of qualification. +- Managed header bidding/yield service can work with existing GAM/demand; confirm exclusivity and notice period in agreement. + +## Directory-ready corrections and additions + +Proposed complete AdNetworkFacts record, excluding minTraffic. Keep published values with their dates and qualifications. + +### Key numbers + +- **PubGuru Premium gate:** $5,000 monthly ad revenue OR 2m monthly pageviews — Premium product criteria, not every MonetizeMore service. Source: [https://www.monetizemore.com/solutions/pubguru-premium/](https://www.monetizemore.com/solutions/pubguru-premium/). +- **Revenue share:** Custom performance-based share — Rate not public. Source: [https://www.monetizemore.com/frequently-asked-questions/](https://www.monetizemore.com/frequently-asked-questions/). + +### Joining and payment + +- **Traffic:** PubGuru Premium: 2m monthly PV OR $5k monthly ad revenue. Source: [https://www.monetizemore.com/solutions/pubguru-premium/](https://www.monetizemore.com/solutions/pubguru-premium/). +- **Product fit:** Managed yield optimization for larger, growing publishers. Source: [https://www.monetizemore.com/solutions/pubguru-premium/](https://www.monetizemore.com/solutions/pubguru-premium/). +- **Terms:** Share and contract scope are set per publisher; confirm lock-in/notice in signed agreement. Source: [https://www.monetizemore.com/frequently-asked-questions/](https://www.monetizemore.com/frequently-asked-questions/). +- Revenue share: Custom performance share; no fixed percentage public. +- Payment terms: Not public. +- Payment threshold: Not public. +- Payment methods: Not public. +- Join summary: $5,000 monthly ad revenue OR 2 million monthly pageviews. + +## Unresolved conflicts and gaps + +- No independent first-person acceptance example with traffic/revenue found. +- Revenue share and payment terms are not public; contract must be reviewed. +- Do not confuse general MonetizeMore service or PubGuru product pages with Premium criteria. + +## Research attempts and sources + +Attempts are stated explicitly so missing evidence is not mistaken for an unavailable or reviewed source. + +- Reviewed current PubGuru Premium page and MonetizeMore FAQ; separated Premium qualification from general service. +- Searched publisher reports and independent comparisons; published numerical cases found were vendor case studies, not independent entry accounts. +- Recorded case-study figures as context only, not forecasts. + +### Sources checked + +- [PubGuru Premium](https://www.monetizemore.com/solutions/pubguru-premium/) — official; checked 2026-10-22. Supports: $5k/month or 2m PV; product-specific gate. +- [MonetizeMore FAQ](https://www.monetizemore.com/frequently-asked-questions/) — official; checked 2026-10-22. Supports: share/terms privately agreed. +- [Publab case](https://www.monetizemore.com/case-study/if-publab-can-5x-their-ad-revenue-using-pubguru-so-can-you/) — vendor_case_study; checked 2026-10-22. Supports: 20+ sites, 100m+ visitors, €300k/month reported. +- [Panlasang Pinoy case](https://www.monetizemore.com/case-study/200-increase-from-adsense-only-setups-with-panlasangpinoy/) — vendor_case_study, published 2019-2021; checked 2026-10-22. Supports: recipe publisher history and PV scale. diff --git a/content_docs/ad-networks/research/monumetric.md b/content_docs/ad-networks/research/monumetric.md index 0c7ef322..3ee4c24f 100644 --- a/content_docs/ad-networks/research/monumetric.md +++ b/content_docs/ad-networks/research/monumetric.md @@ -1,28 +1,92 @@ -# Monumetric +# monumetric: recommendation research -Checked 2026-10-16. +Checked: 2026-10-22 -## Joining +## Product and application -- Traffic: At least 10,000 pageviews. Note: Monthly. Source: https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/. Read 2026-10-16. -- Visitor location: At least 50% from the US, UK, Canada, or Australia. Source: https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/. Read 2026-10-16. -- Content: English; no pornography, drugs, hate speech, or copyrighted content. Source: https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/. Read 2026-10-16. -- Must connect: Not public. The reviewed official pages do not state this rule. Source checked: https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/. Read 2026-10-16. +- Product: Managed publisher ad network with program tiers and Propel entry program. +- Application or contact route: [https://www.monumetric.com/get-started/](https://www.monumetric.com/get-started/). +- Recommendation role: **primary**. Propel starts at 10k monthly pageviews for three consecutive months; setup is limited to WordPress/Blogger and includes a $99 implementation fee. -## Pay +## Official facts -- Monumetric's payment page states Net 60, paid monthly within the first ten business days. Balances below $10 roll forward. US publishers are paid by direct deposit; international publishers by PayPal. Payoneer may be treated like a US bank account in some cases. Revenue share and payment currency are not public on the cited pages. (Source: https://www.monumetric.com/payment-terms-and-how-you-are-paid/, read 2026-10-16.) +Facts below apply to the named program. Missing numeric amounts mean the source did not publish a number. -## Rules +- **Monthly pageviews — minimum**: 10,000 pageviews; period: month for 3 consecutive months; scope: Propel; program: Monumetric. Source: [https://www.monumetric.com/monumetric-program-overview/](https://www.monumetric.com/monumetric-program-overview/). +- **Monthly pageviews — program range**: 80,000 pageviews; period: month for 3 consecutive months; scope: Propel upper tier boundary; program: Monumetric. Source: [https://www.monumetric.com/monumetric-program-overview/](https://www.monumetric.com/monumetric-program-overview/). +- **Top-market audience — minimum**: 50 percent; period: of traffic; scope: US/UK/Australia/Canada; program: Monumetric. Source: [https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/](https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/). +- **Platform — requires**; period: application; scope: Propel; program: Monumetric. Source: [https://www.monumetric.com/requirements-for-the-propel-program/](https://www.monumetric.com/requirements-for-the-propel-program/). +- **Ad slots — minimum**: 6 placements; period: desktop and mobile; scope: Propel; program: Monumetric. Source: [https://www.monumetric.com/requirements-for-the-propel-program/](https://www.monumetric.com/requirements-for-the-propel-program/). +- **Implementation fee — required**: 99 USD; period: one-time; scope: Propel; program: Monumetric. Source: [https://www.monumetric.com/requirements-for-the-propel-program/](https://www.monumetric.com/requirements-for-the-propel-program/). -- Public exclusivity, ad layout controls, contract length, and notice terms were not found in the reviewed eligibility and payment pages. (Sources: https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/ and https://www.monumetric.com/payment-terms-and-how-you-are-paid/, read 2026-10-16.) +## Publisher-reported observations -## Service +Individual reports, not acceptance-rate evidence or revenue forecasts. -- Monumetric offers managed ad optimization. The reviewed payment page does not describe dashboard or support details. (Sources: https://www.monumetric.com/monumetric-program-overview/ and https://www.monumetric.com/payment-terms-and-how-you-are-paid/, read 2026-10-16.) +- **2020-06-17 — Perfection Hangover** (Personal finance). Traffic: 10000 pageviews (reached in fourth month blogging). Reported monthly ad revenue: 436. Countries: United States. Publisher said she waited until about month 12 to apply after reaching 10k PV in month four; reported $436 first-month Monumetric earnings in Feb. 2019. Limits: Historical single publisher report, not current approval promise or typical earnings. Traffic was from a personal-finance blog; country mix not reported. Source: [https://perfectionhangover.com/5-financial-adjustments-to-make-if-youve-been-laid-off-from-work/](https://perfectionhangover.com/5-financial-adjustments-to-make-if-youve-been-laid-off-from-work/). -## Logo +## Editorial inference -Logo source: https://www.monumetric.com/wp-content/uploads/2017/05/monu-logo.png (read 2026-10-16) +### Practical fit + +Useful small-blog option when 10k PV has held for three consecutive months, target-country traffic is over half, and the site can pay the $99 Propel fee and use required ad slots. + +### Estimated range and confidence + +- Traffic reference: **10,000–80,000 pageviews per month**; confidence: high. This is not an admission guarantee. + - Propel range; requires three consecutive months; higher Monumetric tiers exist. + - Basis: [https://www.monumetric.com/monumetric-program-overview/](https://www.monumetric.com/monumetric-program-overview/). +- Revenue range: not estimated. + +- Geography: At least 50% from US/UK/Australia/Canada. +- Site age: No public age rule found. +- Confidence: **high**. Current overview gives tier ranges and three-month history. A dated personal-finance blogger reported reaching 10k in month four but applied around month twelve; earnings are historical. + +### Current-network compatibility + +- Existing ad-provider approval is an explicit Propel condition but does not guarantee Monumetric acceptance. +- Managed ad placements; confirm current scope before combining with an existing display partner. Propel requires six slots and major-ad-provider approval. + +## Directory-ready corrections and additions + +Proposed complete AdNetworkFacts record, excluding minTraffic. Keep published values with their dates and qualifications. + +### Key numbers + +- **Propel traffic:** 10,000–80,000 pageviews/month — At least 3 consecutive months; other programs have higher ranges. Source: [https://www.monumetric.com/monumetric-program-overview/](https://www.monumetric.com/monumetric-program-overview/). +- **Payment minimum:** $10 — Balance carries forward if below minimum. Source: [https://www.monumetric.com/payment-terms-and-how-you-are-paid/](https://www.monumetric.com/payment-terms-and-how-you-are-paid/). +- **Pay day:** Net 60 — Paid monthly within first 10 business days. Source: [https://www.monumetric.com/payment-terms-and-how-you-are-paid/](https://www.monumetric.com/payment-terms-and-how-you-are-paid/). + +### Joining and payment + +- **Traffic:** 10k–80k PV/month for Propel for 3 consecutive months — No single-month shortcut. Source: [https://www.monumetric.com/monumetric-program-overview/](https://www.monumetric.com/monumetric-program-overview/). +- **Top markets:** At least 50% US/UK/Australia/Canada. Source: [https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/](https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/). +- **Content:** English; no pornography, drugs, hate or copyright violations. Source: [https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/](https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/). +- **Propel setup:** WordPress or Blogger, 300px sidebar, six ad slots, major-ad-provider approval, $99 implementation fee. Source: [https://www.monumetric.com/requirements-for-the-propel-program/](https://www.monumetric.com/requirements-for-the-propel-program/). +- Revenue share: Not public. +- Payment terms: Net 60; monthly within first 10 business days. +- Payment threshold: $10. +- Payment methods: US direct deposit, International PayPal. +- Join summary: 10,000 pageviews/month for 3 consecutive months (Propel). + +## Unresolved conflicts and gaps + +- No current acceptance report at the threshold with full geo and content details. +- Historical $436 month is not a forecast. +- No public revenue-share percentage found. + +## Research attempts and sources + +Attempts are stated explicitly so missing evidence is not mistaken for an unavailable or reviewed source. + +- Reviewed current Propel requirements, full program-tier overview and payment terms. +- Opened the publisher's first-person report and verified its niche, 10k PV timing, delayed application and Feb. 2019 earnings. +- Did not present the historical earnings as expected performance. + +### Sources checked + +- [Program overview](https://www.monumetric.com/monumetric-program-overview/) — official; checked 2026-10-22. Supports: Propel 10k–80k PV for three months; higher tiers. +- [General requirements](https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/) — official; checked 2026-10-22. Supports: 50% target countries; English and prohibited topics. +- [Propel program requirements](https://www.monumetric.com/requirements-for-the-propel-program/) — official; checked 2026-10-22. Supports: WordPress/Blogger; sidebar; six ad slots; $99 fee. +- [Payment terms](https://www.monumetric.com/payment-terms-and-how-you-are-paid/) — official; checked 2026-10-22. Supports: Net60; $10; methods. +- [Publisher's personal-finance monetization history](https://perfectionhangover.com/5-financial-adjustments-to-make-if-youve-been-laid-off-from-work/) — publisher_blog, published 2020-06-17; checked 2026-10-22. Supports: 10k PV by month four; applied at month 12; $436 Feb 2019 first month. diff --git a/content_docs/ad-networks/research/newor-media.md b/content_docs/ad-networks/research/newor-media.md index 06562597..980d5a84 100644 --- a/content_docs/ad-networks/research/newor-media.md +++ b/content_docs/ad-networks/research/newor-media.md @@ -1,29 +1,97 @@ -# Newor Media +# newor-media: recommendation research -Checked 2026-10-16. +Checked: 2026-10-22 -## Joining +## Product and application -- Traffic: No minimum for Elevate. Note: Catapult: 60,000 US pageviews; Premier: 420,000 US pageviews monthly. Source: https://newormedia.com/programs. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://newormedia.com/elevatefaqs and https://newormedia.com/programs. Read 2026-10-16. -- Content: English site with navigation; follow Google ad policies. Source: https://newormedia.com/elevatefaqs. Read 2026-10-16. -- Google standing: Follow Google ad policies. Source: https://newormedia.com/elevatefaqs. Read 2026-10-16. -- Must connect: Google Ad Manager account. Source: https://newormedia.com/elevatefaqs. Read 2026-10-16. -- Approval time: Usually 24 to 48 hours. Note: For Elevate review. Source: https://newormedia.com/elevatefaqs. Read 2026-10-16. -- Exclusivity: Required. Note: Newor Media says all publishers must be exclusive. Source: https://newormedia.com/elevatefaqs. Read 2026-10-16. +- Product: Exclusive managed display monetization with Elevate, Catapult and Premier tiers. +- Application or contact route: [https://newormedia.com/programs](https://newormedia.com/programs). +- Recommendation role: **primary**. Elevate has no numeric PV minimum but requires manual review, English, GAM, two ad units per page and exclusivity. Catapult/Premier publish US PV thresholds. -## Pay +## Official facts -- The payment FAQ says Net 30. The platform agreement says Net 45 and also specifies a 90-day initial term. These conflict; trust the signed agreement for an enrolled publisher. Share percentage and threshold are not public. Currency is USD. (Sources: https://newormedia.com/faqs/what-are-your-payment-terms and https://newormedia.com/node/296, read 2026-10-16.) +Facts below apply to the named program. Missing numeric amounts mean the source did not publish a number. -## Rules +- **Monthly US pageviews — minimum**: 60,000 pageviews; period: month; scope: Catapult; program: Newor Media. Source: [https://newormedia.com/programs](https://newormedia.com/programs). +- **Monthly US pageviews — minimum**: 420,000 pageviews; period: month; scope: Premier; program: Newor Media. Source: [https://newormedia.com/programs](https://newormedia.com/programs). +- **Pageviews — no minimum; manual review**: 0 pageviews; period: not stated; scope: Elevate; program: Newor Media. Source: [https://newormedia.com/elevatefaqs](https://newormedia.com/elevatefaqs). +- **Language — requires English**; period: ongoing; scope: Elevate; program: Newor Media. Source: [https://newormedia.com/elevatefaqs](https://newormedia.com/elevatefaqs). +- **Ad units — minimum**: 2 ad units; period: per page; scope: Elevate; program: Newor Media. Source: [https://newormedia.com/elevatefaqs](https://newormedia.com/elevatefaqs). +- **GAM — requires**; period: onboarding; scope: Elevate; program: Newor Media. Source: [https://newormedia.com/elevatefaqs](https://newormedia.com/elevatefaqs). +- **Exclusivity — requires**; period: contract; scope: all sites; program: Newor Media. Source: [https://newormedia.com/elevatefaqs](https://newormedia.com/elevatefaqs). -- Elevate FAQ says the program is exclusive. The platform agreement describes a 90-day initial term, then renewal and written notice at least 14 days before term end. The agreement gives separate non-exclusive OTT treatment and exclusive inventory for some premium private marketplaces. Content must follow Google policies. (Sources: https://newormedia.com/elevatefaqs and https://newormedia.com/node/296, read 2026-10-16.) +## Publisher-reported observations -## Service +Individual reports, not acceptance-rate evidence or revenue forecasts. -- Newor says its dashboard provides real-time reporting. It offers personalized ticket support and expects replies within 24 hours. (Sources: https://newormedia.com/faqs and https://newormedia.com/elevatefaqs, read 2026-10-16.) +- **2026-10-21 — Two unnamed content blogs** (Human-written informational content). Traffic: 10000 sessions (about per month per site). Poster said both blogs were accepted by AdSense and Journey but rejected by Newor; another commenter reported rejection at 40k monthly sessions. Limits: Anonymous; no niche/country split or reason. Sessions are not Newor's published US pageview metric. Source: [https://www.reddit.com/r/adops/comments/1vkm7no/skip_newor_media_by_any_means_possible/](https://www.reddit.com/r/adops/comments/1vkm7no/skip_newor_media_by_any_means_possible/). +- **2022 — Unnamed finance site** (Finance). Traffic: 40000 monthly visitors (publisher reported 40k–60k). Poster reported Newor acceptance; comments described ad placements and a $13.29 eCPM. Limits: Old anonymous report; visitor unit unclear and conditions may have changed. Source: [https://www.reddit.com/r/adops/comments/t8wisu](https://www.reddit.com/r/adops/comments/t8wisu). -## Logo +## Editorial inference -Logo source: https://newormedia.com/sites/default/files/newor_logo_0.png (read 2026-10-16) +### Practical fit + +Elevate can be considered below typical managed-network scale only when the publisher accepts exclusivity and can run GAM plus two ads/page. The lack of a PV floor does not imply easy approval: 2026 reports describe rejection around 10k and 40k sessions. Catapult/Premier are clearer for US-PV scale. + +### Estimated range and confidence + +- Traffic reference: **60,000–420,000 US pageviews per month**; confidence: high. This is not an admission guarantee. + - Published Catapult and Premier tiers; Elevate has no numeric minimum. + - Basis: [https://newormedia.com/programs](https://newormedia.com/programs). +- Revenue range: not estimated. + +- Geography: US PV thresholds for larger programs; Elevate reviews traffic origin; English rule conflicts with older blog. +- Site age: No public age rule found. +- Confidence: **medium**. Current program page and FAQ conflict with a 2025 general onboarding blog. Recent firsthand rejections show manual review can screen out sites under the no-minimum Elevate promise. + +### Current-network compatibility + +- Recent posters said AdSense and Journey acceptance did not transfer; they were still rejected by Newor. +- Newor requires exclusive display monetization; cannot run other networks or direct display sales on the same website during term. + +## Directory-ready corrections and additions + +Proposed complete AdNetworkFacts record, excluding minTraffic. Keep published values with their dates and qualifications. + +### Key numbers + +- **Catapult traffic:** 60,000 US pageviews/month — Program-specific; Elevate has no numeric minimum. Source: [https://newormedia.com/programs](https://newormedia.com/programs). +- **Premier traffic:** 420,000 US pageviews/month — Premier only. Source: [https://newormedia.com/programs](https://newormedia.com/programs). +- **Pay timing:** Net 30 / Net 45 — Public FAQ says Net30; platform agreement says Net45—signed contract controls. Source: [https://newormedia.com/faqs/what-are-your-payment-terms](https://newormedia.com/faqs/what-are-your-payment-terms). + +### Joining and payment + +- **Elevate traffic:** No pageview minimum; manual review — Current Elevate FAQ. Source: [https://newormedia.com/elevatefaqs](https://newormedia.com/elevatefaqs). +- **Catapult/Premier:** 60k and 420k US PV/month respectively. Source: [https://newormedia.com/programs](https://newormedia.com/programs). +- **Elevate criteria:** English site, navigation, Google policy alignment, at least two ad units/page, GAM account and exclusivity. Source: [https://newormedia.com/elevatefaqs](https://newormedia.com/elevatefaqs). +- **Language conflict:** Aug 2025 blog says non-English sites may be accepted with 50% US/UK/Canada/Australia traffic; current Elevate FAQ says sites must be English — Program-specific FAQ is current; confirm in writing. Source: [https://newormedia.com/blog/ad-monetization-onboarding-with-newor-media/](https://newormedia.com/blog/ad-monetization-onboarding-with-newor-media/). +- Revenue share: Not public. +- Payment terms: Net30 in FAQ; Net45 in platform agreement. +- Payment threshold: Not public. +- Payment methods: PayPal, Payoneer, Direct wire transfer. +- Join summary: Elevate: no pageview minimum, but manual review, English, GAM and exclusivity. + +## Unresolved conflicts and gaps + +- Resolve current English-only FAQ against 2025 claim that non-English can pass with 50% Tier1. +- Resolve Net30 FAQ vs Net45 agreement using signed IO. +- Publisher anecdotes are anonymous and sessions do not map to posted US PV thresholds. + +## Research attempts and sources + +Attempts are stated explicitly so missing evidence is not mistaken for an unavailable or reviewed source. + +- Checked current tier page, Elevate FAQ, 2025 onboarding blog, platform agreement and payment FAQ. +- Opened a current firsthand rejection thread: two sites around 10k monthly sessions were rejected, and another poster reported rejection at 40k sessions. +- Checked an older accepted finance-site report; treated visitor unit and old terms as uncertain. +- Recorded both current FAQ/blog language and Net30/Net45 contract conflicts. + +### Sources checked + +- [Current publisher programs](https://newormedia.com/programs) — official; checked 2026-10-22. Supports: Catapult 60k US PV; Premier 420k US PV. +- [Elevate FAQ](https://newormedia.com/elevatefaqs) — official; checked 2026-10-22. Supports: no PV min; English/GAM/two ads; exclusivity; manual review. +- [Onboarding article](https://newormedia.com/blog/ad-monetization-onboarding-with-newor-media/) — official_blog, published 2025-08-11; checked 2026-10-22. Supports: 10k display/30k AIVision PV; 50% Tier1 for non-English; conflicts with current FAQ. +- [Publisher platform agreement](https://newormedia.com/node/296) — official_terms; checked 2026-10-22. Supports: exclusive display terms and Net45 agreement language. +- [Payment terms FAQ](https://newormedia.com/faqs/what-are-your-payment-terms) — official; checked 2026-10-22. Supports: Net30 FAQ. +- [Newor rejections](https://www.reddit.com/r/adops/comments/1vkm7no/skip_newor_media_by_any_means_possible/) — publisher_forum, published 2026-10-21; checked 2026-10-22. Supports: two blogs at about 10k sessions and separate 40k session rejection. +- [Newor finance publisher report](https://www.reddit.com/r/adops/comments/t8wisu) — publisher_forum, published 2022; checked 2026-10-22. Supports: 40–60k visitors and claimed acceptance; older anonymous report. diff --git a/content_docs/ad-networks/research/nitropay.md b/content_docs/ad-networks/research/nitropay.md index f45462cd..f722d8c9 100644 --- a/content_docs/ad-networks/research/nitropay.md +++ b/content_docs/ad-networks/research/nitropay.md @@ -1,28 +1,35 @@ # NitroPay -Checked 2026-10-16. +Checked 2026-10-22. -## Joining +## Official facts -- Traffic: Not public. The reviewed official pages do not state this rule. Source checked: https://nitropay.com/docs/. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://nitropay.com/docs/. Read 2026-10-16. -- Content: Not public. The reviewed official pages do not state this rule. Source checked: https://nitropay.com/docs/. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://nitropay.com/docs/. Read 2026-10-16. -- Must connect: Not public. The reviewed official pages do not state this rule. Source checked: https://nitropay.com/docs/. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://nitropay.com/docs/. Read 2026-10-16. +NitroPay's current docs say reviewers consider **both sessions and pageviews**, where the traffic comes from, and site content. The docs publish no minimum volume or country mix. GA4 access can speed review. NitroPay does not currently support mobile apps. Its 5–7 business-day timing starts after the quality team has accepted a site; it describes SSP coverage and go-live, not the initial decision. The publisher form shows traffic bands but those are form choices, not admission rules. Docs describe Google MCM setup and the ad-tag workflow. The archive says Net 7 and no fixed payout floor above transaction fees; payment options vary by location. The exact revenue share is not public. Current archived terms describe programmatic exclusivity, while direct sales and affiliate placements may remain; publishers should confirm their signed terms. -## Pay +## Dated publisher reports -- NitroPay's docs archive states Net 7 and no minimum payout as long as earnings exceed the transaction fee. The archive does not provide a universal revenue share, full method list, or currency. A bonus page lists additional share increases for qualifying agreements; it is not a base share. (Sources: https://nitropay.com/docs/ and https://nitropay.com/bonus/, read 2026-10-16.) +- **Oct 2025 (Reddit)**: a gaming-site owner reported about 90,000 pageviews per day and 14,000 active users while comparing NitroPay, Playwire, and Publisher Collective; the post was a question, not a decision or outcome. [Post](https://www.reddit.com/r/adops/comments/1mpgmnn/looking_for_comparison_with_nitropay_vs_playwire/) +- **Jul 2026 (Reddit, self-report)**: a downloadable-gaming site reported 600,000 views and 150,000 sessions in 30 days while on NitroPay, with $133 revenue. A commenter with a similar-size gaming site said around $300, but did not provide a full comparable breakdown. This is a useful warning about geography, impressions, and format, not a forecast. [Thread](https://www.reddit.com/r/adops/comments/1vep1yo/gaming-site-getting-133-ad-revenue-despite-600k/) +- A separate gaming publisher said Nitro gave more control and flexibility than its tested peers, but shared no traffic or revenue numbers. [Comparison](https://www.reddit.com/r/adops/comments/1mpgmnn/looking_for-comparison-with-nitropay-vs-playwire/) -## Rules +## Editorial inference -- Contract terms and publisher ad/layout control are not public in the reviewed docs archive. (Source: https://nitropay.com/docs/, read 2026-10-16.) +Best fit is a web publisher that can work with a manual ad-tech review and values control, responsive formats, and gaming or enthusiast demand. Do not infer acceptance from an existing network membership. Traffic range stays unset: there is no public floor, and the examples do not establish a lower entry point. The checker should keep pageviews and sessions as separate user inputs, and use country share and current network only as context. -## Service +## Directory-ready corrections -- Publishers can contact the success team by email or through the dashboard chat bubble. The docs recommend a 90-day testing period. The dashboard and its exact reports are not fully described in the archived docs. (Source: https://nitropay.com/docs/, read 2026-10-16.) +- Replace “Not public” with “Traffic amount, geography, and content are reviewed; no numeric minimum is published.” +- Label 5–7 business days as post-acceptance SSP activation, not application review. +- Keep Net 7 and the no-fixed-minimum payout statement, with transaction fees and local method limits noted. -## Logo +## Evidence gaps -Logo source: https://nitropay.com/wp-content/uploads/2024/05/cropped-256x256-1-192x192.png (read 2026-10-16) +No current public acceptance-rate, country threshold, revenue floor, or reliable lower-end application example was found. The 2026 revenue anecdote is one small, self-reported gaming sample and cannot predict another site's RPM. + +## Sources + +- [Approval and integration docs](https://nitropay.com/docs/) — official; checked 2026-10-22; traffic factors, GA4, app support, approval versus go-live timing, payment. +- [Publisher guidelines](https://blog.nitropay.com/guidelines/) — official; checked 2026-10-22; prohibited content. +- [Publisher application](https://nitropay.com/publishers/) — official; checked 2026-10-22; application route and traffic bands. +- [Gaming-site comparison](https://www.reddit.com/r/adops/comments/1mpgmnn/looking_for_comparison_with_nitropay_vs_playwire/) — Reddit firsthand reports; published about Oct 2025; applicant context and qualitative network experience. +- [600k-view gaming-site report](https://www.reddit.com/r/adops/comments/1vep1yo/gaming-site-getting-133-ad-revenue-despite-600k/) — Reddit firsthand report; published about Jul 2026; traffic, countries, formats, and revenue. diff --git a/content_docs/ad-networks/research/opti-digital.md b/content_docs/ad-networks/research/opti-digital.md index d0a42a27..61639be8 100644 --- a/content_docs/ad-networks/research/opti-digital.md +++ b/content_docs/ad-networks/research/opti-digital.md @@ -1,28 +1,35 @@ # Opti Digital -Checked 2026-10-16. +Checked 2026-10-22. -## Joining +## Official facts -- Traffic: Not public. The reviewed official pages do not state this rule. Source checked: https://knowledge-base.optidigital.com/knowledge/understanding-your-payment-terms. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://knowledge-base.optidigital.com/knowledge/understanding-your-payment-terms. Read 2026-10-16. -- Content: Not public. The reviewed official pages do not state this rule. Source checked: https://knowledge-base.optidigital.com/knowledge/understanding-your-payment-terms. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://knowledge-base.optidigital.com/knowledge/understanding-your-payment-terms. Read 2026-10-16. -- Must connect: Not public. The reviewed official pages do not state this rule. Source checked: https://knowledge-base.optidigital.com/knowledge/understanding-your-payment-terms. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://knowledge-base.optidigital.com/knowledge/understanding-your-payment-terms. Read 2026-10-16. +Opti Digital sells Ad Manager Hub, Yield Hub, and Demand Hub. It is a monetization layer around Google Ad Manager, with managed inventory and managed-account arrangements; this is not a single self-serve ad-network offer. The publisher knowledge base distinguishes them: Managed Inventory routes Google and other demand through Opti and pays Net 45; Managed Account leaves Google revenue on Google's 25-day cycle and pays Opti demand Net 60. The public pages do not state one traffic, revenue, age, or country admission minimum, nor a standard share rate or payout floor. -## Pay +The referral page is a **referral-program checklist**, not a universal admission policy: referred partners should be quality publishers, have tags live on most traffic for at least three months, serve eligible geographies, meet inventory checks, and have at least three ads per page in the recommended layout. Referral payments are not publisher revenue terms. Contact/sales is the general route; do not present the referral form as a universal publisher application. -- Opti Digital uses a revenue-share model but does not publish the share rate. Payment flow depends on setup: Managed Inventory is Net 45; applicable demand under Managed Account is Net 60, while Google pays its revenue on its own 25-day cycle. The order and specific terms control. Threshold, method, and currency are not public in the cited help pages. (Sources: https://knowledge-base.optidigital.com/knowledge/understanding-your-payment-terms and https://knowledge-base.optidigital.com/knowledge/how-is-the-invoicing-working-at-opti-digital-when-will-i-get-paid, read 2026-10-16.) +## Dated publisher reports -## Rules +- **May 2026, vendor case study**: Opti describes 1XL adding premium PMP demand with Demand Hub. It demonstrates a supplemental-demand use, but gives no traffic, revenue, approval, or independent customer account. [Case study](https://optidigital.com/resources/case-studies/how-1xl-unlocked-incremental-premium-demand-with-opti-digital/) +- Targeted searches found no detailed independent publisher report with an application outcome and traffic figures. Vendor case studies and referral testimonials are not independent admission evidence. -- Public exclusivity, content restrictions, term, and notice were not found in the cited pages. The two GAM management setups are different commercial arrangements. (Source: https://knowledge-base.optidigital.com/knowledge/understanding-your-payment-terms, read 2026-10-16.) +## Editorial inference -## Service +Fit is strongest for an established publisher already using GAM that wants managed yield work or incremental demand and can evaluate its contract setup. It can supplement an existing stack in some configurations; Managed Inventory can instead replace the existing ad-serving route. Since no validated traffic or revenue floor emerged, leave estimated ranges null. Current network can guide a conversation about GAM ownership and overlap, but cannot establish Opti eligibility. -- Opti Digital explains payment flow and auto-invoices in its publisher knowledge base. Public details on dashboard reports and support level were not found in these sources. (Source: https://knowledge-base.optidigital.com/knowledge/how-is-the-invoicing-working-at-opti-digital-when-will-i-get-paid, read 2026-10-16.) +## Directory-ready corrections -## Logo +- Keep traffic, geography, and content thresholds as not public. +- Add “Three-month live-tag and eligible-geo rules apply to the referral offer only.” +- Explain payment timing separately by Managed Inventory versus Managed Account; do not imply one default Net term. -Logo source: https://optidigital.com/wp-content/uploads/2025/01/logo.svg (read 2026-10-16) +## Evidence gaps + +No public publisher application checklist, standard share, entry revenue example, or independently reported approval threshold was found. Referral eligibility should not be generalized to every contract. + +## Sources + +- [Payment terms by setup](https://knowledge-base.optidigital.com/knowledge/understanding-your-payment-terms) — official help; checked 2026-10-22; payment flow and terms. +- [Demand Hub setup](https://knowledge-base.optidigital.com/knowledge/getting-started-with-demand-hub) — official help; checked 2026-10-22; technical requirements for that product. +- [Publisher referral program](https://optidigital.com/refer-a-publisher/) — official; checked 2026-10-22; referral-only conditions. +- [1XL case study](https://optidigital.com/resources/case-studies/how-1xl-unlocked-incremental-premium-demand-with-opti-digital/) — vendor case study; published May 2026; supplemental PMP-demand use, without scale figures. diff --git a/content_docs/ad-networks/research/playwire.md b/content_docs/ad-networks/research/playwire.md index 0d4b5460..a74ba002 100644 --- a/content_docs/ad-networks/research/playwire.md +++ b/content_docs/ad-networks/research/playwire.md @@ -1,28 +1,41 @@ # Playwire -Checked 2026-10-16. +Checked 2026-10-22. -## Joining +## Official facts -- Traffic: 500,000 monthly pageviews or 1,000 daily active users. Note: Qualification page separately suggests applying from 100,000 monthly pageviews. Source: https://www.playwire.com/faq. Read 2026-10-16. -- Visitor location: At least 20% of traffic from the US. Note: Qualification guidance. Source: https://www.playwire.com/qualification-criteria. Read 2026-10-16. -- Content: Unique, original content. Source: https://www.playwire.com/qualification-criteria. Read 2026-10-16. -- Google standing: Not blacklisted by Google or major ad providers. Source: https://www.playwire.com/qualification-criteria. Read 2026-10-16. -- Must connect: Implement the Playwire SDK. Note: Required to access its demand. Source: https://www.playwire.com/faq. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://www.playwire.com/faq and https://www.playwire.com/qualification-criteria. Read 2026-10-16. +Two current official pages use different numbers for different purposes. The FAQ states **500,000 monthly website pageviews or 1,000 daily active app users**. The qualification page says publishers typically apply at **100,000 monthly pageviews** to get full ROI; it is application guidance, not a replacement admission rule. The same page says 20% US traffic is associated with higher average revenue, not an eligibility gate. The FAQ also lists unique original content, no blacklisting by Google or major ad providers, IVT no higher than 7%, and Playwire SDK implementation. The current Apply Now page sends website/blog applicants to RAMP and gives separate routes for mobile and desktop apps. Playwire's FAQ explicitly bars AdSense and Ad Exchange ads alongside its script; other integrations need confirmation. Treat its managed product as a potential primary replacement stack. Terms published 50% of net direct-sales revenue and 75% of net indirect-sales revenue, Net 60; payment floor and methods are not public. -## Pay +## Dated publisher reports -- Playwire says payments begin monthly on Net 60 terms. It describes revenue sharing but does not publish the rate, threshold, methods, or currency on its FAQ. (Source: https://www.playwire.com/faq, read 2026-10-16.) +- **Oct 2026 (Reddit)**: a gaming publisher with 1.4M monthly pageviews, 110K MAU, and over 50% US traffic said NitroPay, Publift, and Playwire approached them; they had no outcome yet. Another commenter reported using Playwire at about 1M pageviews and 10% US; a different commenter said Playwire rejected them at about 1M pageviews and 25% US. These are anonymous, conflicting outcomes and do not establish a geography rule. [Thread](https://www.reddit.com/r/adops/comments/1wp5uz8/completely_new_to_ads_been_approached_by_nitropay/) +- **May 2026 (Reddit)**: a gaming-site publisher switching from Playwire described video inventory and performance concerns at 50–60% Tier 1, with 10M impressions and 30% fill in its best month. The thread is a comparison, not an independent audit. [Thread](https://www.reddit.com/r/adops/comments/1sza527/venatus_vs_publisher_collective/) +- A gaming publisher who tested several partners said Playwire performed best in one A/B comparison; no scale data was supplied. [Comparison](https://www.reddit.com/r/adops/comments/1mpgmnn/) -## Rules +## Editorial inference -- Playwire says it recommends ad layouts but publishers have final say. Its FAQ says other ad network tags cannot run together with the Playwire script. The pages do not publish contract length or notice. The quality requirements include original content and privacy/security basics. (Sources: https://www.playwire.com/faq and https://www.playwire.com/qualification-criteria, read 2026-10-16.) +Playwire is a plausible managed primary stack for gaming, education/tools, entertainment, apps, and larger content sites that want bundled ad operations. The 500K FAQ threshold is a useful screen; the 100K guidance may support an application conversation but not a promise of fit. Geography, IVT, and content quality still matter. A current-network answer should flag that another programmatic script may need to be removed. -## Service +## Directory-ready corrections -- Playwire provides a dashboard, campaign tracking, and dedicated publisher-success, yield, and technical teams. (Source: https://www.playwire.com/faq, read 2026-10-16.) +- Preserve both official numbers with their different meanings. +- Remove any implication that 20% US is a hard gate. +- Add the SDK, IVT, Google-standing, and AdSense/Ad Exchange compatibility rules. +- Keep pay share split by direct versus indirect revenue; floor/method remain unpublished. -## Logo +## Evidence gaps -Logo source: https://www.playwire.com/hubfs/1-playwire-logo-primary-2021%20(1)-1.png (read 2026-10-16) +No official traffic-country cutoff or public payout floor was found. Recent publisher outcomes are self-reported and do not explain the conflicting acceptance decisions. + +## Sources + +- [Apply Now](https://www.playwire.com/apply) — official; checked 2026-10-22; routes website/blog, mobile-app, and desktop-app applicants. +- [Publisher FAQ](https://www.playwire.com/faq) — official; checked 2026-10-22; 500K/1K, IVT, SDK, exclusivity and payment summary. +- [Qualification criteria](https://www.playwire.com/qualification-criteria) — official; checked 2026-10-22; 100K apply guidance, 20% US revenue signal, content and Google standing. +- [Publisher terms](https://www.playwire.com/terms-of-service) — official; checked 2026-10-22; publisher shares and Net 60. +- [Oct 2026 gaming-site comparison](https://www.reddit.com/r/adops/comments/1wp5uz8/completely_new_to_ads_been_approached_by_nitropay/) — firsthand but anonymous; published Oct 2026; site scale, vendor approaches and mixed Playwire outcomes. +- [Gaming video-fill comparison](https://www.reddit.com/r/adops/comments/1sza527/venatus_vs_publisher_collective/) — firsthand but anonymous; published about May 2026; gaming, Tier 1 share, impressions and reported fill. + +## Coordinator source check, 2026-10-23 + +The coordinator re-read the complete FAQ on 2026-10-23. The compatibility answer explicitly covers AdSense and Ad Exchange alongside the Playwire script. It does not establish a universal prohibition on every other provider; confirm other integrations in the agreement. diff --git a/content_docs/ad-networks/research/pubfuture.md b/content_docs/ad-networks/research/pubfuture.md index f2556d2a..93fb75b6 100644 --- a/content_docs/ad-networks/research/pubfuture.md +++ b/content_docs/ad-networks/research/pubfuture.md @@ -1,28 +1,36 @@ # PubFuture -Checked 2026-10-16. +Checked 2026-10-23. -## Joining +## Official facts -- Traffic: Not public. The official site requires JavaScript and exposed no readable eligibility details. Source checked: https://pubfuture.com/. Read 2026-10-16. -- Visitor location: Not public. The official site requires JavaScript and exposed no readable eligibility details. Source checked: https://pubfuture.com/. Read 2026-10-16. -- Content: Not public. The official site requires JavaScript and exposed no readable eligibility details. Source checked: https://pubfuture.com/. Read 2026-10-16. -- Google standing: Not public. The official site requires JavaScript and exposed no readable eligibility details. Source checked: https://pubfuture.com/. Read 2026-10-16. -- Must connect: Not public. The official site requires JavaScript and exposed no readable eligibility details. Source checked: https://pubfuture.com/. Read 2026-10-16. -- Approval time: Not public. The official site requires JavaScript and exposed no readable eligibility details. Source checked: https://pubfuture.com/. Read 2026-10-16. +PubFuture markets a managed monetization platform with an emphasis on H5 gaming. The coordinator opened its JavaScript-rendered [homepage FAQ](https://pubfuture.com/home) on 2026-10-23. Question 5 states a minimum of **100,000 pageviews a month**, safe content without nudity, and PubFuture lines in ads.txt. Question 8 says its tags work inside Google Ad Manager and other ad servers. Question 9 states Net 30, with January earnings paid at the end of February. The earlier text-only fetch missed these collapsed answers. -## Pay +The official onboarding path is the [publisher sign-up form](https://ssp.pubfuture.com/auth/signup), followed by site review. No standard share, country percentage, or age requirement was found. An older indexed excerpt listed a $50 payment minimum and several payment methods; these were not reconfirmed in the live FAQ or terms, so they are omitted from current directory facts. -- The official publisher FAQ lists Net 30, a $50 minimum, and PayPal, Payoneer, bank transfer, and Bitcoin. It does not publish a revenue-share percentage or currency details beyond those payment methods. (Source: https://pubfuture.com/?from=chapterpage, read 2026-10-16.) +## Dated publisher reports -## Rules +- The H5-game article “The Secret to 400% More Revenue…” is PubFuture-authored/vendor material; it discusses a site around 100,000 monthly pageviews but does not establish admission rules or a typical outcome. [Article](https://blog.pubfuture.com/the-secret-to-400-more-revenue-for-h5-game-sites-pubfutures-winning-formula/1007/) +- Targeted searches found sparse independent evidence: no detailed, dated publisher account with both traffic and an acceptance or migration outcome. Low-volume review pages and unanswered questions do not supply usable entry evidence. -- The public FAQ says publishers can block unwanted ads. Exclusivity, broader content restrictions, contract length, and notice are not public in the reviewed source. (Source: https://pubfuture.com/?from=chapterpage, read 2026-10-16.) +## Editorial inference -## Service +Treat PubFuture as a specialist managed option for H5 games and similar interactive inventory at or above its published floor. A generic solo blog has weaker evidence of niche fit. Vendor case results do not establish expected returns. A publisher with an existing game ad stack should confirm commercial compatibility and the revenue share. -- PubFuture says publishers receive support within 24 hours from an ad-operations team. It describes ad optimization and reports but does not publish a dashboard service specification. (Source: https://blog.pubfuture.com/the-secret-to-400-more-revenue-for-h5-game-sites-pubfutures-winning-formula/1007/, read 2026-10-16.) +## Directory-ready corrections -## Logo +- Show the FAQ's 100,000 monthly pageview floor, safe-content rule, and ads.txt setup. +- Keep the H5 vendor case separate from the admission rule. +- Show verified Net 30; omit the unreconfirmed $50 minimum and payment methods. -Logo source: https://pubfuture.com/static/media/Logo.f2e39296.svg (read 2026-10-16) +## Evidence gaps + +Independent acceptance reports, country preference, typical site maturity, base share, payment minimum, and payment methods remain unconfirmed. + +## Sources + +- [PubFuture publisher FAQ](https://pubfuture.com/home) — official; opened in the browser 2026-10-23 after dismissing consent; expanded questions 5, 8, and 9 for entry, integration, and payment terms. +- [H5 game case article](https://blog.pubfuture.com/the-secret-to-400-more-revenue-for-h5-game-sites-pubfutures-winning-formula/1007/) — vendor-authored; date shown in prior research as 2025; case context only, not a general joining rule. +- [Publisher sign-up](https://ssp.pubfuture.com/auth/signup) — official; checked 2026-10-23; create an account and submit the website for review. +- [Publisher contact](https://pubfuture.com/contact) — official; checked 2026-10-22; contact route. +- [Third-party H5 case discussion](https://publishergrowth.com/blog-details/the-secret-to-400-more-revenue-for-h5-game-sites-pubfutures-winning-formula) — vendor-linked/sponsored context; published about 2025; not independent corroboration. diff --git a/content_docs/ad-networks/research/pubgalaxy.md b/content_docs/ad-networks/research/pubgalaxy.md index 26e8b552..0336554e 100644 --- a/content_docs/ad-networks/research/pubgalaxy.md +++ b/content_docs/ad-networks/research/pubgalaxy.md @@ -1,34 +1,35 @@ # PubGalaxy -## Status (read 2026-10-16) +Checked 2026-10-22. -- Azerion bought PubGalaxy in late 2021 (https://www.thedrum.com/news/2021/10/21/gaming-platform-azerion-acquires-pubgalaxy-and-inskin-media). On 2026-09-23 Azerion moved its publisher services under the Improve Digital name (https://exchangewire.com/blog/2026/09/23/azerion-unifies-publisher-supply-business-under-improve-digital/). pubgalaxy.com now redirects to improvedigital.com. -- PubGalaxy's sellers.json is still live (https://cdn.pubgalaxy.com/sellers.json, 7,187 rows), and sites still name `MANAGERDOMAIN=pubgalaxy.com` in ads.txt. We keep PubGalaxy as its own network. If sites start naming an Improve Digital manager line, add Improve Digital as a network then. Don't use `improvedigital.com` seller lines as manager evidence: it appears in most ads.txt files as an exchange. +## Official facts +PubGalaxy is no longer a live, separately presented publisher offer. Its publisher, terms, and Learn Center URLs now redirect to Improve Digital. Azerion announced on **September 23, 2026** that it unified the publisher supply business under the Improve Digital name, replacing the formerly separate offers. The current Improve Digital page describes two routes: **Yield**, a managed header-bidding/yield service for publishers without a dedicated ad-ops team, and **SSP**, a demand platform for publishers who run their own stack. The current access form asks whether the applicant wants Yield or SSP. The former PubGalaxy payment and entry terms cannot be treated as current Improve Digital terms. -Checked 2026-10-16. +The Improve Digital page offers an access request, but several older contact URLs currently resolve to a 404. The product page itself has the current request-access form; use that only when discussing the replacement offer. -## Joining +## Dated publisher reports -- Traffic: Not public. The old Learn Center URL redirects to Improve Digital, so PubGalaxy-specific rules could not be confirmed there. Source checked: https://www.pubgalaxy.com/learn-center/. Read 2026-10-16. -- Visitor location: Not public. The old Learn Center URL redirects to Improve Digital, so PubGalaxy-specific rules could not be confirmed there. Source checked: https://www.pubgalaxy.com/learn-center/. Read 2026-10-16. -- Content: Not public. The old Learn Center URL redirects to Improve Digital, so PubGalaxy-specific rules could not be confirmed there. Source checked: https://www.pubgalaxy.com/learn-center/. Read 2026-10-16. -- Google standing: Not public. The old Learn Center URL redirects to Improve Digital, so PubGalaxy-specific rules could not be confirmed there. Source checked: https://www.pubgalaxy.com/learn-center/. Read 2026-10-16. -- Must connect: Not public. The old Learn Center URL redirects to Improve Digital, so PubGalaxy-specific rules could not be confirmed there. Source checked: https://www.pubgalaxy.com/learn-center/. Read 2026-10-16. -- Approval time: Not public. The old Learn Center URL redirects to Improve Digital, so PubGalaxy-specific rules could not be confirmed there. Source checked: https://www.pubgalaxy.com/learn-center/. Read 2026-10-16. +- Legacy PubGalaxy customer logos and old case studies were found, but no current, independently reported PubGalaxy application example with traffic and outcome. Historical seller lines are not current admission proof. +- Searches for current Improve Digital publisher entry examples did not surface independent traffic-and-approval reports. Current official examples describe product type, not eligibility numbers. -## Pay +## Editorial inference -- Published terms give publishers at least 85% of net partner revenue and at least 65% of net direct revenue. Payment is within 35 days after month-end once PubGalaxy receives advertiser funds. Threshold is $50 for PayPal or $100 for wire. Methods are PayPal and wire. Currency is not stated in the cited terms. (Source: https://www.pubgalaxy.com/terms-and-conditions/, read 2026-10-16.) +A shortlist should mark PubGalaxy as **retired/migrated** and avoid ranking it as an available application option. If the person wants a similar current service, Improve Digital may be a sales-led alternative: Yield can replace a managed stack; SSP can supplement a publisher-owned stack. Neither route has a public traffic or payment threshold verified here. This distinction matters for current-network compatibility and the recommendation should not infer eligibility from a legacy PubGalaxy relationship. -## Rules +## Directory-ready corrections -- The terms say the publisher must own or license its content and permit PubGalaxy to manage ad inventory. They allow changes needed to improve user experience and describe direct deal obligations. The Learn Center says specific terms can vary. Exclusivity and notice should be checked in the signed order. (Sources: https://www.pubgalaxy.com/terms-and-conditions/ and https://www.pubgalaxy.com/learn-center/, read 2026-10-16.) +- Set `applicationUrl` to null for PubGalaxy and say the standalone offer is unavailable. +- Remove prior PubGalaxy payout/traffic numbers from current facts unless clearly labeled as historical contract terms. +- Link the Improve Digital access form as a separate alternative, not as a PubGalaxy application. -## Service +## Evidence gaps -- The publisher Learn Center describes granular earnings reporting and direct/private-marketplace deal access. Exact support response times are not public. (Source: https://www.pubgalaxy.com/learn-center/, read 2026-10-16.) +Improve Digital's public pages do not expose a numeric joining floor or standard payment terms. Its home page showed a request-access form, while the linked generic contact route returned 404 during this check. -## Logo +## Sources -pubgalaxy.com now redirects to improvedigital.com (Azerion), so no PubGalaxy logo was saved. Check whether this listing still stands. +- [Azerion unification announcement](https://www.azerion.com/azerion-unifies-its-publisher-supply-business-under-improve-digital-launching-a-full-circle-solution-for-publishers/) — official; published Sep 23, 2026; states the rebrand and Yield/SSP product split. +- [Improve Digital](https://improvedigital.com/) — official; checked 2026-10-22; Yield/SSP descriptions and request-access form. +- [Former PubGalaxy publisher page](https://www.pubgalaxy.com/publishers/) — official legacy URL; checked 2026-10-22; redirects to Improve Digital. +- [Former PubGalaxy Learn Center](https://www.pubgalaxy.com/learn-center/) — official legacy URL; checked 2026-10-22; redirects; its old criteria are not current. diff --git a/content_docs/ad-networks/research/publift.md b/content_docs/ad-networks/research/publift.md index 61613244..74639990 100644 --- a/content_docs/ad-networks/research/publift.md +++ b/content_docs/ad-networks/research/publift.md @@ -1,29 +1,36 @@ # Publift -Checked 2026-10-16. +Checked 2026-10-22. -## Joining +## Official facts -- Traffic: 500,000 pageviews is a secondary signal. Note: Monthly; revenue is the primary qualifying metric. Source: https://www.publift.com/blog/publift-requirements. Read 2026-10-16. -- Visitor location: No location-based limit stated. Note: Publift says it does not discriminate by traffic origin. Source: https://www.publift.com/blog/publift-requirements. Read 2026-10-16. -- Content: Useful, safe, original content. Source: https://www.publift.com/blog/publift-requirements. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://www.publift.com/blog/publift-requirements. Read 2026-10-16. -- Must connect: Not public. The reviewed official pages do not state this rule. Source checked: https://www.publift.com/blog/publift-requirements. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://www.publift.com/blog/publift-requirements. Read 2026-10-16. -- Ad revenue: More than $2,000 a month. Note: Primary qualifying metric, in USD. Source: https://www.publift.com/blog/publift-requirements. Read 2026-10-16. +Publift's Oct 8, 2026 requirements guide identifies monthly ad revenue as its main qualifying measure: it says it partners with publishers earning **more than $2,000 USD/month**. It uses pageviews as a secondary size indicator, with 500,000 monthly pageviews described as a benchmark, and says rapidly growing publishers below the revenue level may still contact the team. It also reviews genuine and consistent traffic and useful, original, safe content. This is a strong standard-fit signal, not an absolute promise that every smaller site is rejected. The current publisher enquiry form asks for monthly revenue, pageviews, and the majority traffic location; these are intake fields, not additional published eligibility rules. The guide says location is not used as a strict discriminator. Public comparison pages state an 80/20 split, $200 payment minimum, bank transfer, and Net 30 Google/Net 90 other-network timing; those are vendor comparison claims and should be checked against the order. -## Pay +## Dated publisher reports -- Publift's official 2026 comparison page lists $200 as the minimum payout, direct bank transfer, Google revenue on Net 30, and other network revenue on Net 90. This is marketing comparison content; confirm applicable currency and terms in the order. Revenue share is not stated in the specific requirements page. (Sources: https://www.publift.com/blog/ezoic-vs-adsense-vs-publift and https://www.publift.com/blog/publift-requirements, read 2026-10-16.) +- **Oct 2026 (Reddit)**: a gaming publisher with 1.4M monthly pageviews, 110K MAU, and >50% US traffic said Publift forecast $4K–$10K net monthly revenue. The author explicitly questioned the estimate and had not yet reported a launch or realized revenue; do not use it as an RPM or forecast. [Thread](https://www.reddit.com/r/adops/comments/1wp5uz8/completely_new_to_ads_been_approached_by_nitropay/) +- **Sep 2026 (Reddit)**: one React PWA publisher said a fullscreen ad broke the test site and stopped an A/B trial; another commenter said it had worked well for them for a couple of years. The posts give no traffic or revenue. [Review thread](https://www.reddit.com/r/adops/comments/1w7fix0/any_publift_review/) +- **Sep 2026 (Reddit)**: a publisher said Publift yielded roughly $2,000 per million pageviews, but the stated site was a single-page app with 1.6M MAU, and the post does not state its actual monthly PV or revenue. It is not a monthly-entry benchmark. [Thread](https://www.reddit.com/r/adops/comments/1wp5uz8/completely_new_to_ads_been_approached_by_nitropay/) -## Rules +## Editorial inference -- The current requirements page does not state exclusivity, ad layout control, prohibited categories, contract duration, or notice. A Publift blog says service is month-to-month and describes an 80/20 split, but it is general comparison guidance; confirm the actual order. (Sources: https://www.publift.com/blog/publift-requirements and https://www.publift.com/blog/upgrading-from-ad-network-to-full-stack, read 2026-10-16.) +Best suited to a site already producing roughly $2K+ in ad revenue, especially one seeking managed yield and account support. Monthly ad revenue is the strongest known recommender field; pageviews alone are an incomplete proxy across countries and formats. It can replace the site's primary display stack. No independent entry example below the published revenue mark was found. -## Service +## Directory-ready corrections -- Publift's Fuse platform and FAQ describe ad optimization and reporting. Its comparison page says publishers receive a dedicated account-management team. (Sources: https://www.publift.com/faqs and https://www.publift.com/blog/ezoic-vs-adsense-vs-publift, read 2026-10-16.) +- Keep the $2,000 USD/month figure as Publift's stated primary qualifying measure. +- Label 500K monthly pageviews as secondary context, not the admission threshold. +- Retain 80/20 and payout terms only as comparison-page terms, with contract confirmation. -## Logo +## Evidence gaps -Logo source: https://cdn.prod.website-files.com/667cbf5245f9cfc1c54313a4/667d0a4713549fb13643e879_Publift%20Logo%20%E2%80%93%20Black.svg (read 2026-10-16) +No public country-specific cutoff, Google approval rule, or independent successful application near the $2K line was found. The 2026 forecast is vendor-provided and unverified. + +## Sources + +- [Publisher enquiry form](https://www.publift.com/lets-talk) — official; checked 2026-10-22; collects website, monthly revenue/pageviews, and main traffic region. +- [Publift requirements](https://www.publift.com/blog/publift-requirements) — official; published Oct 8, 2026; revenue and secondary traffic guidance. +- [How it works](https://www.publift.com/how-it-works) — official; checked 2026-10-22; demand geography and managed-service model. +- [2026 comparison and shares](https://www.publift.com/blog/best-mediavine-alternatives) — official vendor comparison; checked 2026-10-22; 80/20 statement. +- [Publisher review discussion](https://www.reddit.com/r/adops/comments/1w7fix0/any_publift_review/) — Reddit firsthand reports; about Sep 2026; mixed experiences, no scale data. +- [Publisher inquiry and approaches](https://www.reddit.com/r/adops/comments/1wp5uz8/completely_new_to_ads_been_approached_by_nitropay/) — Reddit self-report; Oct 2026; gaming size, vendor forecast, no realized result. diff --git a/content_docs/ad-networks/research/publir.md b/content_docs/ad-networks/research/publir.md index b9fd2a4d..a564fcf1 100644 --- a/content_docs/ad-networks/research/publir.md +++ b/content_docs/ad-networks/research/publir.md @@ -1,28 +1,31 @@ # Publir -Checked 2026-10-16. +Checked 2026-10-22. -## Joining +## Official facts -- Traffic: No traffic limit. Source: https://publir.com/app/pricing. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://publir.com/app/pricing. Read 2026-10-16. -- Content: Not public. The reviewed official pages do not state this rule. Source checked: https://publir.com/app/pricing. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://publir.com/app/pricing. Read 2026-10-16. -- Must connect: Not public. The reviewed official pages do not state this rule. Source checked: https://publir.com/app/pricing. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://publir.com/app/pricing. Read 2026-10-16. +Publir is a product suite, not only a display ad network: its public pages describe dynamic ad optimization and programmatic ads as well as subscriptions, ad-block recovery, crowdfunding, and commerce tools. Its pricing page says there is no traffic limit for the product, but that is not an explicit guarantee of admission at every size. The public service agreement (last updated October 15, 2024) describes programmatic revenue with 15% retained and 85% passed to the publisher, at least monthly on Net 60; ad-serving and infrastructure fees may also be deducted. Custom advertising has separate economics (50/50 Net 60); the pricing-page 15% fee applies to a different Pro plan. Do not compress these into one share. Public payment threshold and methods were not found. -## Pay +## Dated publisher reports -- The pricing page lists a 15% Publir fee for its Pro service. The service agreement separately describes custom ad revenue as a 50/50 split on Net 60 terms. These are different service models, so there is no single universal share. A payment threshold, methods, and currency are not public in these pages. (Sources: https://publir.com/app/pricing and https://publir.com/service_agreement, read 2026-10-16.) +- Targeted searches found founder interviews, product pages, and unanswered publisher questions, but no detailed independent publisher account tying site niche, dated traffic, and a Publir application or migration outcome. Do not treat product testimonials as independent entry proof. -## Rules +## Editorial inference -- Publir offers ad optimization, adblock recovery, subscriptions, crowdfunding, and QuickShop. The service agreement allows changes to percentages for costs and fees. Other exclusivity, content, contract-length, and notice rules were not confirmed in the public pages. (Sources: https://publir.com/app/pricing and https://publir.com/service_agreement, read 2026-10-16.) +Publir may suit a publisher looking for a specific add-on such as subscriptions, ad-block recovery, or crowdfunding, and it can run programmatic monetization as a primary service. A site seeking only a conventional managed ad network has less publicly verifiable fit evidence. Current-network compatibility depends on which product is selected: the agreement says Publir serves 100% of programmatic ads for its programmatic service, but subscription tools are different. No numeric recommendation range is supported. -## Service +## Directory-ready corrections -- Pro support is by email during business hours; Enterprise includes real-time analytics and phone support. The service agreement says onboarding may take ten business days and support hours are weekdays 8 a.m. to 5 p.m. Eastern, with a 12-hour response target outside those hours. (Sources: https://publir.com/app/pricing and https://publir.com/service_agreement, read 2026-10-16.) +- Replace “no traffic limit” with “the pricing page lists no traffic limit; admission criteria are not fully disclosed.” +- Separate 85% publisher share for programmatic, custom-ad 50/50, and 15% Pro fee. +- Note possible deductions and that the public agreement is dated 2024. -## Logo +## Evidence gaps -Logo source: https://publir.com/assets/img/publir.svg (read 2026-10-16) +No standard admission checklist, country preferences, payment minimum, or independent publisher entry case was found. Confirm current contract terms before presenting the 2024 agreement as current. + +## Sources + +- [Pricing](https://publir.com/app/pricing) — official; checked 2026-10-22; product plans and fee context. +- [Service agreement](https://publir.com/service_agreement) — official; last updated Oct 15, 2024, checked 2026-10-22; programmatic and custom-ad splits, payment timing and deductions. +- [Products](https://publir.com/) — official; checked 2026-10-22; broader publisher product suite. diff --git a/content_docs/ad-networks/research/publisher-collective.md b/content_docs/ad-networks/research/publisher-collective.md index cfbbc783..8ae3e0c5 100644 --- a/content_docs/ad-networks/research/publisher-collective.md +++ b/content_docs/ad-networks/research/publisher-collective.md @@ -1,28 +1,37 @@ # Publisher Collective -Checked 2026-10-16. +Checked 2026-10-22. -## Joining +## Official facts -- Traffic: No numeric minimum stated. Source: https://www.publisher-collective.com/partners-terms-conditions. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://www.publisher-collective.com/partners-terms-conditions. Read 2026-10-16. -- Content: Own or license the media; no prohibited content. Source: https://www.publisher-collective.com/partners-terms-conditions. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://www.publisher-collective.com/partners-terms-conditions. Read 2026-10-16. -- Must connect: Integrate its systems and ad tags. Source: https://www.publisher-collective.com/partners-terms-conditions. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://www.publisher-collective.com/partners-terms-conditions. Read 2026-10-16. +The current FAQ says the combined organization grew from Publisher Collective and Snigel into one group in 2025, with 220+ publishers and nearly 500 managed sites worldwide. It is selective and invests hands-on work per site. Its core verticals are Technology, Video Gaming, Hobbies & Casual Games, Knowledge & Education, Sports, and Health & Wellbeing. Outside those genres, it says it can help sites with **3 million pageviews/month**. Its guide says it will evaluate sites around **€300/day in ad revenue**, while also considering lower-earning sites with strong growth potential or high-quality content. €300/day is a review signal, not a hard minimum. Setup takes 10–14 days and full ramp may take 30 days; neither is an approval-time guarantee. Commercial share is set in the agreement; current partner terms say advertiser-payment timing controls and specify €500 payout floor, with bank transfer in GBP/EUR/USD. Site owners can start through the publisher partner-enquiry form; it is a sales-led review, not self-serve approval. -## Pay +## Dated publisher reports -- The partner terms set a €500 payment threshold. Payment is made after the advertiser pays, by bank transfer, in GBP, EUR, or USD. Share percentage is set in a separate representation agreement. A blog claims 20% share, Net 30, and $150 minimum, which conflicts with the partner terms; trust signed terms for enrolled publishers. (Sources: https://www.publisher-collective.com/partners-terms-conditions and https://www.publisher-collective.com/blog/google-ad-exchange, read 2026-10-16.) +- **Oct 2025 (Reddit)**: a gaming-site owner with 90K+ daily pageviews was exploring NitroPay, Playwire, and Publisher Collective; the post supplies no application result. [Post](https://www.reddit.com/r/adops/comments/1mpgmnn/looking_for_comparison_with_nitropay_vs_playwire/) +- **May 2026 (Reddit)**: an HTML5 gaming publisher using Playwire described 50–60% Tier 1 traffic, 10M impressions and 35M requests in its best month, and compared Publisher Collective and Venatus for video inventory and server-side options. This is a question, not a tested Publisher Collective result. [Thread](https://www.reddit.com/r/adops/comments/1sza527/venatus_vs_publisher_collective/) +- **2026 (Trustpilot)**: two reviewers alleged payment/termination problems after years with the predecessor or group. These are unverified single-publisher complaints, not proof of a general practice. [Reviews](https://www.trustpilot.com/review/www.publisher-collective.com) -## Rules +## Editorial inference -- Terms restrict discriminatory, weapon, pornographic, hateful, and indecent material. Publishers may need to update site materials within seven days, must not change ad tags, and may need to pass leads to Publisher Collective. Terms allow suspension or termination for non-response. Fixed exclusivity and contract duration are not stated in the public summary. (Source: https://www.publisher-collective.com/partners-terms-conditions, read 2026-10-16.) +Best fit is a mid-sized or larger independent publisher in its named niches, particularly gaming and tech, with original content, reputable traffic, and enough revenue to support managed optimization. Outside core niches, the 3M PV gate is much more directly useful than a generic estimate. Strong niche fit can justify an inquiry below the revenue signal, but no success rate is published. Ask current network and ad-stack questions because the combined Snigel/PC offer may overlap a managed stack. -## Service +## Directory-ready corrections -- The public FAQ directs publishers to apply and sign individual terms. Dashboard, reporting, and support details are not stated. (Source: https://www.publisher-collective.com/faq, read 2026-10-16.) +- Add Hobbies & Casual Games to core genres. +- Keep 3M pageviews/month specifically for non-core genres. +- Mark €300/day as flexible evaluation guidance; lower sites may be considered. +- Clarify 10–14 days is setup, not approval. -## Logo +## Evidence gaps -Logo source: https://cdn.prod.website-files.com/68836a588bfd1b747039a684/68ace17d3e7e2dcd1b4cb05e_webclip-pub-col.png (read 2026-10-16) +No publicly verified acceptance outcomes with traffic, country mix, and ad revenue were found for recent PC applications. + +## Sources + +- [Publisher partner enquiry](https://www.publisher-collective.com/publisher-contact) — official; checked 2026-10-22; site-owner monetization route. +- [Current FAQ](https://www.publisher-collective.com/faq) — official; checked 2026-10-22; niches, selectivity, size, revenue, onboarding. +- [Partner terms](https://www.publisher-collective.com/partners-terms-conditions) — official; checked 2026-10-22; payment and agreement terms. +- [Gaming network comparison](https://www.reddit.com/r/adops/comments/1mpgmnn/) — publisher discussion; about Oct 2025; traffic context, no application decision. +- [Publisher Collective and Venatus comparison](https://www.reddit.com/r/adops/comments/1sza527/venatus_vs_publisher_collective/) — firsthand but anonymous; about May 2026; gaming, traffic mix and format needs. +- [Trustpilot reviews](https://www.trustpilot.com/review/www.publisher-collective.com) — user-submitted reviews; checked 2026-10-22; complaints dated Jan–Apr 2026, unverified. diff --git a/content_docs/ad-networks/research/pubnation.md b/content_docs/ad-networks/research/pubnation.md index 945fb206..bde86f0f 100644 --- a/content_docs/ad-networks/research/pubnation.md +++ b/content_docs/ad-networks/research/pubnation.md @@ -1,28 +1,31 @@ # PubNation -Checked 2026-10-16. +Checked 2026-10-22. -## Joining +## Official facts -- Traffic: Not public. The official homepage could not be retrieved during this check. Source checked: https://pubnation.com/. Read 2026-10-16. -- Visitor location: Not public. The official homepage could not be retrieved during this check. Source checked: https://pubnation.com/. Read 2026-10-16. -- Content: Not public. The official homepage could not be retrieved during this check. Source checked: https://pubnation.com/. Read 2026-10-16. -- Google standing: Not public. The official homepage could not be retrieved during this check. Source checked: https://pubnation.com/. Read 2026-10-16. -- Must connect: Not public. The official homepage could not be retrieved during this check. Source checked: https://pubnation.com/. Read 2026-10-16. -- Approval time: Not public. The official homepage could not be retrieved during this check. Source checked: https://pubnation.com/. Read 2026-10-16. +PubNation is no longer available as a separate publisher program. Mediavine's current Help Center says it recently completed migration of PubNation sites to Mediavine and that the PubNation offering is no longer available. The PubNation marketing site still exists, but it is not a reliable application route against the current support notice. There is no current PubNation eligibility or payment schedule to recommend. -## Pay +## Dated publisher reports -- Publisher share, payment timing, threshold, methods, and currency were not public on the reviewed official site. (Source: https://pubnation.com/, read 2026-10-16.) +- **About March 2026 (Reddit; page displayed “7 months ago” on Oct 22)**: a gaming blogger with a nearly nine-year-old site reported acceptance to PubNation at 30–40K monthly sessions, mostly from Google. They reported about $140 after a 60K-session month on AdSense, then $621 and $614 months after moving to PubNation, with self-reported RPM around $21. This is a useful historical entry example, but the current program has since migrated; sessions are not pageviews, and no country mix was given. [Post](https://www.reddit.com/r/Blogging/comments/1s0ly5b/) -## Rules +## Editorial inference -- Public publisher exclusivity, ad control, content restrictions, contract length, and notice were not found. (Source: https://pubnation.com/, read 2026-10-16.) +Do not recommend PubNation as a current option or infer current Mediavine eligibility from this old acceptance. The report can inform historical fit for gaming sites but cannot provide a present-day traffic range. If a user selects PubNation as their current network, flag that the publisher is likely on the successor Mediavine relationship and ask which current Mediavine program it refers to. -## Service +## Directory-ready corrections -- Public publisher reporting, dashboard, support, and additional tools were not found. (Source: https://pubnation.com/, read 2026-10-16.) +- Mark the product as discontinued/migrated, with no standalone application route. +- Preserve the historical 30–40K sessions report only as “reported historical acceptance,” never as a current cutoff. +- Do not show old PubNation payout details as current terms. -## Logo +## Evidence gaps -Logo source: https://www.pubnation.com/wp-content/uploads/2024/06/PubNation-Revenue-Logo-Black-1.svg (read 2026-10-16) +The current Mediavine help notice does not provide a public migration-by-migration date or explain whether every historical contract term carried over. The Reddit post is anonymous and was not independently verified. + +## Sources + +- [Mediavine Help Center](https://help.mediavine.com/) — official; checked 2026-10-22; current status that PubNation migration is complete and offer unavailable. +- [PubNation homepage](https://www.pubnation.com/) — official legacy marketing page; checked 2026-10-22; still accessible, but does not override current Help Center status. +- [Historical acceptance account](https://www.reddit.com/r/Blogging/comments/1s0ly5b/) — firsthand, anonymous; page displayed about seven months old on 2026-10-22; gaming, sessions, age and reported revenue. diff --git a/content_docs/ad-networks/research/pubpower.md b/content_docs/ad-networks/research/pubpower.md index cf4c48df..1ab01691 100644 --- a/content_docs/ad-networks/research/pubpower.md +++ b/content_docs/ad-networks/research/pubpower.md @@ -1,28 +1,40 @@ # PubPower -Checked 2026-10-16. +Checked 2026-10-23. -## Joining +## Official facts -- Traffic: Not public. The official help article could not be retrieved during this check. Source checked: https://help.pubpower.io/article/payment-methods-terms. Read 2026-10-16. -- Visitor location: Not public. The official help article could not be retrieved during this check. Source checked: https://help.pubpower.io/article/payment-methods-terms. Read 2026-10-16. -- Content: Not public. The official help article could not be retrieved during this check. Source checked: https://help.pubpower.io/article/payment-methods-terms. Read 2026-10-16. -- Google standing: Not public. The official help article could not be retrieved during this check. Source checked: https://help.pubpower.io/article/payment-methods-terms. Read 2026-10-16. -- Must connect: Not public. The official help article could not be retrieved during this check. Source checked: https://help.pubpower.io/article/payment-methods-terms. Read 2026-10-16. -- Approval time: Not public. The official help article could not be retrieved during this check. Source checked: https://help.pubpower.io/article/payment-methods-terms. Read 2026-10-16. +PubPower sells managed monetization to smaller publishers and also describes custom-bidder infrastructure for publishers with their own stack. Its official website-requirements help page says “around 100,000 visitors/month,” alongside traffic quality and content checks. The article is marked as last updated about three years ago, so preserve it as dated official guidance, not a confirmed current hard cutoff. The page bars pop-ups/redirects and disallows or restricts unsafe, illegal, gambling, and infringing content. Onboarding instructions describe adding a site and its ads.txt/ad tag, with review timing stated as 24–48 hours in the quick start and 2–4 days in FAQ guidance. Payment help, also last updated about two years ago, lists Net 0 above $3,000 monthly revenue and otherwise Net 30; method minimums are bank $1,000, PayPal $100, Payoneer $50, and crypto-specific floors. Current indexed official package copy says Essential revenue share is tailored for smaller publishers while the Advanced custom-bidder option has no revenue share; it does not publish the Essential percentage. The PubPower marketing page could not be opened directly in this check, so confirm the current rate in the account terms. -## Pay +## Dated publisher reports -- PubPower says payments are Net 0 when monthly revenue is above $3,000 and Net 30 otherwise. Thresholds depend on method: bank $1,000, PayPal $100, Payoneer $50, and crypto methods from $100 to $1,000. Exact share and payout currency are not stated on the page. (Source: https://help.pubpower.io/article/payment-methods-terms, read 2026-10-16.) +- **About Jun 2024 (Reddit)**: an anime-site owner said the site was seven months old, had “around 100k traffic,” and was running both AdSense and PubPower; they said PubPower's CPM was below AdSense at that time. The metric behind “traffic” is ambiguous, and no application outcome or revenue was reported. [Post](https://www.reddit.com/r/adops/comments/1dpv6e3/) -## Rules +## Editorial inference -- Publisher exclusivity, placement control, content restrictions, contract term, and notice were not found in the reviewed payment page. A separate white-label revenue-share article is for ad-network clients, not publishers. (Sources: https://help.pubpower.io/article/payment-methods-terms and https://help.pubpower.io/article/white-label-solution-for-adnetworks-revenue-share-and-request-based-price-models, read 2026-10-16.) +Potential fit is a smaller-to-mid-size publisher seeking a managed ad stack, especially where current traffic is near the dated 100K guideline. Sites already using AdSense may be compatible in at least some setups, but confirm whether the selected PubPower package is managed or custom bidders. Don't mark an old help-center number as a current strict gate. Current ad revenue is useful for package economics and Net 0 eligibility, not a substitute for the traffic metric. -## Service +## Directory-ready corrections -- Public publisher dashboard, support, and reporting details were not found in the reviewed payment article. (Source: https://help.pubpower.io/article/payment-methods-terms, read 2026-10-16.) +- Qualify ~100K monthly visitors as old official help guidance, last updated around 2023. +- Keep Essential’s share as tailored and unpublished, and Advanced custom-bidder access as no-share; the current package wording was available only in the official search excerpt. +- Keep the different 24–48 hour and 2–4 day review estimates and note weekends may add time. +- Preserve payment floors and terms with a two-year-old-source warning. -## Logo +## Evidence gaps -Logo source: https://pubpower.io/img/pp-logo-2.svg (read 2026-10-16) +No newer official joining rule, clear traffic geography preference, or independent successful approval with an unambiguous visits/pageviews metric was found. + +## Sources + +- [Publisher account registration](https://apps.pubpower.io/register) — official; checked 2026-10-23; account creation form. The quick-start guide links here, then asks publishers to add a domain for QA review. +- [Publisher package details](https://pubpower.io/) — official marketing page search excerpt; checked 2026-10-23; Essential share described as tailored and Advanced custom-bidder package as no-share; direct page open failed in this check. +- [Website requirements](https://help.pubpower.io/article/website-requirements) — official help; checked 2026-10-22; displayed update around 2023; visitor guidance and content rules. +- [Quick start](https://help.pubpower.io/article/quick-start-to-your-monetization) — official help; checked 2026-10-22; setup and 24–48-hour review wording. +- [Getting-started FAQ](https://help.pubpower.io/article/getting-started-faqs) — official help; checked 2026-10-22; alternative 2–4-day review estimate. +- [Payment methods and terms](https://help.pubpower.io/article/payment-methods-terms) — official help; checked 2026-10-22; marked updated about two years ago; payment conditions. +- [Anime-site question](https://www.reddit.com/r/adops/comments/1dpv6e3/) — firsthand but anonymous; published about Jun 2024; site age, ambiguous traffic, niche and simultaneous AdSense use. + +## Coordinator source check, 2026-10-23 + +The coordinator opened the complete payment-methods page on 2026-10-23. Its last-update label remains two years ago. It confirms Net-0 for revenue over USD3,000/month and Net-30, along with method-specific minimums. The current signed agreement should confirm those dated terms. diff --git a/content_docs/ad-networks/research/raptive.md b/content_docs/ad-networks/research/raptive.md index 628c6abc..331fe33d 100644 --- a/content_docs/ad-networks/research/raptive.md +++ b/content_docs/ad-networks/research/raptive.md @@ -1,28 +1,35 @@ # Raptive -Checked 2026-10-16. +Checked 2026-10-23. -## Joining +## Official facts -- Traffic: At least 25,000 pageviews. Note: Monthly. Source: https://raptive.com/creators/. Read 2026-10-16. -- Visitor location: Majority from the US, Canada, UK, Australia, or New Zealand. Source: https://raptive.com/creators/. Read 2026-10-16. -- Content: 100% original content. Source: https://raptive.com/creators/. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://raptive.com/creators/. Read 2026-10-16. -- Must connect: Set up Google Analytics. Source: https://raptive.com/creators/. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://raptive.com/creators/. Read 2026-10-16. +Raptive's eligibility article was updated September 26, 2026. It sets a **25,000 monthly pageview minimum**. At 25,000–99,999 pageviews, at least 50% of traffic must come from the US, UK, Canada, New Zealand, and/or Australia; at 100,000+ pageviews, the qualifying share drops to 40%. Both bands require a domain at least six months old, Google Analytics correctly set up, high-quality original content with meaningful human involvement, and easy ad implementation. The lower band also requires long-form content on most pages. Apply through the [Raptive dashboard](https://dashboard.raptive.com/); a direct page preview in this check showed a browser-session verification screen, so the eligibility rules below are sourced from the official help article. Raptive’s August 24, 2026 Getting Started guide states a 75% publisher share and Net 45 payment timing. The payment article lists a $25 floor for most methods or $100 for wire; that threshold article is dated November 8, 2023. -## Pay +## Dated publisher reports -- Raptive states a 75% publisher share. It pays Net 45 on the 15th. The threshold is $25, or $100 for wire. The payment help page lists ACH, PayPal, and wire. (Sources: https://raptive.com/fbp/ and https://help.raptive.com/hc/en-us/articles/202052255-When-do-I-get-paid, read 2026-10-16.) +- **Oct 2026 (Reddit)**: a commenter in a recipe-site comparison said they were accepted by Raptive at 25K views six months after launch. They described a gaming niche and said 80% of their own traffic was Google; they did not state country share, revenue, or analytics verification. The thread's original poster's 300K monthly sessions and recipe niche are not the accepted commenter's metrics. [Thread](https://www.reddit.com/r/Blogging/comments/1x8brun/) +- **2024 (Reddit)**: a local-blog publisher said Raptive raised reported RPM from about $3 to $8 at 1M monthly pageviews and roughly $10K monthly, but the comparison to a peer was not independently verifiable. [Post](https://www.reddit.com/r/adops/comments/1fc8jhp/) -## Rules +## Editorial inference -- Public materials reviewed do not state an exclusivity rule, contract length, or notice period. Raptive supplies standard or custom layouts based on publisher size; the signed agreement should confirm placement controls. (Source: https://help.raptive.com/hc/en-us/articles/360035078152-Getting-Started-with-Raptive, read 2026-10-16.) +This is a well-defined primary managed-network fit for a six-month-old site once it has 25K+ pageviews and the right country share. Track exact pageviews separately from sessions. Tier 1 share is not a substitute for the named five-country rule. At lower traffic, site quality and mostly long-form pages matter. No official ad-revenue minimum was found; current monthly revenue can help compare options but should not be a gate. -## Service +## Directory-ready corrections -- Raptive provides a dashboard, support tickets, and a dedicated manager by tier. Reporting and layout customization differ by publisher tier. (Source: https://help.raptive.com/hc/en-us/articles/360035078152-Getting-Started-with-Raptive, read 2026-10-16.) +- Keep 25K monthly PV as the floor; split geography at 25K–99,999 versus 100K+. +- Add six-month domain age, GA, long-form condition for lower band, and human-led original content. +- Do not say only “majority Tier 1” or assume that all Tier 1 countries qualify. -## Logo +## Evidence gaps -Logo source: https://raptive.com/ (read 2026-10-16) +No official revenue threshold or approval time is published. The 25K acceptance example is one anonymous report and does not state country mix. + +## Sources + +- [Raptive dashboard](https://dashboard.raptive.com/) — official application destination; direct preview checked 2026-10-23 showed a browser-session verification page. +- [Who is eligible for Raptive?](https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive) — official; updated Sep 26, 2026; traffic bands, countries, age, content and analytics. +- [Getting Started with Raptive](https://help.raptive.com/hc/en-us/articles/360035078152-Getting-Started-with-Raptive) — official; published Aug 24, 2026 and checked 2026-10-23; 75% share and Net 45. +- [Payment schedule](https://help.raptive.com/hc/en-us/articles/202052255-When-do-I-get-paid) — official; article dated Nov 8, 2023; Net 45 and payout minimums. +- [Recipe-site comparison](https://www.reddit.com/r/Blogging/comments/1x8brun/) — firsthand but anonymous; Oct 2026; 25K acceptance claim and contextual comments. +- [Local blog comparison](https://www.reddit.com/r/adops/comments/1fc8jhp/) — firsthand but anonymous; about Sep 2024; reported 1M PV and revenue after Raptive. diff --git a/content_docs/ad-networks/research/refinery89.md b/content_docs/ad-networks/research/refinery89.md index 45003b02..7b71279e 100644 --- a/content_docs/ad-networks/research/refinery89.md +++ b/content_docs/ad-networks/research/refinery89.md @@ -1,28 +1,37 @@ # Refinery89 -Checked 2026-10-16. +Checked 2026-10-23. -## Joining +## Official facts -- Traffic: Not public. The reviewed official pages do not state this rule. Source checked: https://refinery89.com/publisher-ad-management-solution-refinery89/. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://refinery89.com/publisher-ad-management-solution-refinery89/. Read 2026-10-16. -- Content: Not public. The reviewed official pages do not state this rule. Source checked: https://refinery89.com/publisher-ad-management-solution-refinery89/. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://refinery89.com/publisher-ad-management-solution-refinery89/. Read 2026-10-16. -- Must connect: Not public. The reviewed official pages do not state this rule. Source checked: https://refinery89.com/publisher-ad-management-solution-refinery89/. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://refinery89.com/publisher-ad-management-solution-refinery89/. Read 2026-10-16. +Refinery89's current eligibility FAQ says publishers should contact its team to discuss the site's needs; it publishes no pageview or revenue minimum. Its service FAQ says it works with publishers worldwide. The current Get Started form accepts a site or app, asks for a pageview band and country, and offers account registration; those are intake fields, not a published cutoff. No fixed approval time is published. The FAQ describes no lock-in to start, with later commercial terms set by agreement. Payment FAQs list a €250 or $250 monthly payout threshold (regional variation is possible), Tipalti methods such as transfer, eCheck, wire, and PayPal, and no standard payment timing: the publisher should confirm it with the account manager. A universal revenue share is not public. -## Pay +## Dated publisher reports -- Refinery89 says payment minimum is €250 or $250 per month depending on region. It publishes different payment terms and asks publishers to contact their Publisher Success Manager for the actual schedule. Share, methods, and currency beyond the threshold are not fully public. (Sources: https://refinery89.com/docs/faqs/finance/is-there-a-minimum-threshold-for-getting-paid/ and https://refinery89.com/docs/faqs/finance/when-do-publishers-get-paid/, read 2026-10-16.) +- **2025 (Trustpilot)**: one reviewer said they received no response after applying; the review provided no traffic, niche, or country. In a reply dated Feb 2026, Refinery89 said site review includes traffic and content but did not give a numeric threshold. This is a single unverified complaint and reply. [Reviews](https://www.trustpilot.com/review/refinery89.com) +- Refinery89's case study describes work with a French local-news publisher, and another company-authored story discusses a Netherlands lifestyle publisher. These are vendor case studies without public traffic or application criteria, not independent proof of a minimum. [Case study](https://refinery89.com/how-a-partnership-built-on-trust-accelerates-ad-revenue-growth/) -## Rules +## Editorial inference -- Public exclusivity, placement control, content restrictions, contract term, and notice were not found in the cited pages. (Source: https://refinery89.com/publisher-ad-management-solution-refinery89/, read 2026-10-16.) +Treat it as a sales-led managed option for publishers looking for a single tag, ad management, or app/web monetization, with worldwide availability but undisclosed volume screening. It may be worth an inquiry for a publisher whose traffic is outside the largest Tier 1 markets, but there is no public evidence that every geography is equally attractive. No numeric range is justified. Monthly ad revenue, country mix, and current stack are useful for the initial conversation, not eligibility proxies. -## Service +## Directory-ready corrections -- Refinery89 describes a publisher dashboard with daily revenue, CPM, RPM, pageview, fill, and viewability reports, invoice history, tickets, exports, and ads.txt management. Publishers can contact a success manager through a Chrome plugin, dashboard, WhatsApp, email, or phone. (Sources: https://refinery89.com/publisher-ad-management-solution-refinery89/ and https://refinery89.com/revamped-usercentric-dashboard-sep24/, read 2026-10-16.) +- Replace “no specific minimum” with “no public traffic minimum; contact the team for site review.” +- State worldwide service as availability, not a preferred geography or guaranteed acceptance. +- Keep €250/$250 as a payout threshold only; do not present it as an application revenue floor. +- Keep payment timing and revenue share contract-specific. -## Logo +## Evidence gaps -Logo source: https://refinery89.com/wp-content/uploads/2022/10/Refinery89-Logo-without-claim.svg (read 2026-10-16) +No numeric entry examples, standardized payment schedule, revenue share, or independent successful application report with traffic data was found. + +## Sources + +- [Get Started application](https://refinery89.com/get-started/) — official; checked 2026-10-23; collects site/app, pageview band and country without showing admission cutoffs. +- [Am I eligible?](https://refinery89.com/docs/faqs/requirements/am-i-eligible/) — official FAQ; checked 2026-10-22; no numeric threshold and contact-based review. +- [Service locations](https://refinery89.com/docs/faqs/about-refinery89/where-does-refinery89-operate-and-offer-its-services/) — official FAQ; checked 2026-10-22; worldwide service. +- [How to start](https://refinery89.com/docs/faqs/onboarding/how-can-i-start-working-with-refinery89/) — official FAQ; checked 2026-10-22; onboarding route. +- [Payout threshold](https://refinery89.com/docs/faqs/finance/is-there-a-minimum-threshold-for-getting-paid/) — official FAQ; checked 2026-10-22; regional minimum payout. +- [Publisher Trustpilot reviews](https://www.trustpilot.com/review/refinery89.com) — user reports; checked 2026-10-22; one 2025 complaint and company reply in 2026, no metrics. +- [Local publisher case study](https://refinery89.com/how-a-partnership-built-on-trust-accelerates-ad-revenue-growth/) — company-authored; date not surfaced in this check; publisher type, no traffic/entry data. diff --git a/content_docs/ad-networks/research/revcontent.md b/content_docs/ad-networks/research/revcontent.md index b959a1e0..5ffd51e1 100644 --- a/content_docs/ad-networks/research/revcontent.md +++ b/content_docs/ad-networks/research/revcontent.md @@ -1,28 +1,36 @@ # Revcontent -Checked 2026-10-16. +Checked 2026-10-22. -## Joining +## Official facts -- Traffic: No universal minimum stated. Source: https://help.revcontent.com/knowledge/publisher-terms. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://help.revcontent.com/knowledge/publisher-terms. Read 2026-10-16. -- Content: Comply with publisher terms and content policy. Source: https://help.revcontent.com/knowledge/publisher-terms. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://help.revcontent.com/knowledge/publisher-terms. Read 2026-10-16. -- Must connect: Not public. The reviewed official pages do not state this rule. Source checked: https://help.revcontent.com/knowledge/publisher-terms. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://help.revcontent.com/knowledge/publisher-terms. Read 2026-10-16. +Revcontent's current Publisher Help article explicitly says there is no minimum pageview or traffic requirement. It also says each application and each domain is reviewed by a human team case by case; approval of the publisher account does not guarantee that every site/widget will be approved. Apply through its publisher application form; approved domains receive placement choices and widget code. The product is a content-recommendation/native-ad widget and supplemental demand, not a full display-stack replacement. Publisher terms bar categories including illegal or infringing content, pornography/obscenity, illicit drugs, and unlawful gambling. Payment methods depend on location; official payment help requires a complete payee profile and tax form. Existing public agreement facts list a $250 agreement floor, with method-level floors of $100 for US ACH, $100 for international PayPal, and $1,000 for international wire; no standard share or payment interval was found. -## Pay +## Dated publisher reports -- Revenue share is negotiated and the terms calculate publisher revenue after allowed fees. The terms reference a $250 payment floor. Method requirements list ACH for US publishers at $100, PayPal for international publishers at $100 with limits, and international wire at $1,000. The terms and method page do not give one single threshold; confirm the dashboard/order. Currency is USD. (Sources: https://help.revcontent.com/knowledge/publisher-terms and https://help.revcontent.com/knowledge/publisher-payment-requirements-methods, read 2026-10-16.) +- **2019 (Reddit)**: a publisher said Revcontent held a balance after identifying invalid traffic. The post gives no site niche or traffic figures, and the dispute is unverified. [Thread](https://www.reddit.com/r/adops/comments/bx97d2/) +- **2016 (publisher blog)**: a publisher described about 45 days using Revcontent but gave old and limited operational details. It is too dated to estimate current acceptance or product fit. [Review](https://www.techgrapple.com/revcontent-ad-network-review-publishers/) +- Recent targeted searches mainly found application questions, not dated reports with traffic and approval outcomes. -## Rules +## Editorial inference -- The publisher terms set policy and placement requirements but the reviewed public text does not state a universal exclusivity or contract term. Content restrictions are in publisher policy. (Source: https://help.revcontent.com/knowledge/publisher-terms, read 2026-10-16.) +Revcontent may be a low-volume experiment when a publisher wants native recommendations, because its published rule has no numeric traffic floor. That does not mean approval is automatic: domain/content review remains discretionary. The ad format may be a poor fit when clean editorial UX or tight brand control is more important than additional recommendation inventory. Ask about placement control, revenue share, and rejection/appeal process before applying. Do not compare its lack of a traffic minimum to managed display networks' traffic thresholds. -## Service +## Directory-ready corrections -- Public support, reporting, and dashboard service-level details were not found in the reviewed terms. (Source: https://help.revcontent.com/knowledge/publisher-terms, read 2026-10-16.) +- State “no traffic minimum published; all publisher applications and domains receive case-by-case review.” +- Keep the product role as supplemental/native recommendation. +- Separate agreement and payment-method thresholds; no standard Net term or revenue share is public. -## Logo +## Evidence gaps -Logo source: https://d2fygbv2jsp7sc.cloudfront.net/666eb0acab3d7ab79b4aa515/666eb0acab3d7ab79b4aa535_revcontent-logo.svg (read 2026-10-16) +No current independent acceptance example with site scale, geography, and decision outcome was found. The user reports above are old and lack enough context for a recommendation band. + +## Sources + +- [Creating a publisher account](https://help.revcontent.com/knowledge/creating-a-revcontent-publisher-account) — official help; checked 2026-10-22; no minimum and per-domain human review. +- [Publisher application](https://www.revcontent.com/resources/revcontent-publisher-application) — official; checked 2026-10-22; apply route. +- [Publisher payment requirements](https://help.revcontent.com/knowledge/publisher-payment-requirements-methods) — official help; checked 2026-10-22; payee/tax setup and payment methods. +- [Publisher terms](https://help.revcontent.com/knowledge/publisher-terms) — official; checked 2026-10-22; content and agreement conditions. +- [2019 invalid-traffic dispute](https://www.reddit.com/r/adops/comments/bx97d2/) — anonymous firsthand claim; published 2019; no site or traffic details. +- [2016 review](https://www.techgrapple.com/revcontent-ad-network-review-publishers/) — publisher blog; published 2016; dated user experience only. diff --git a/content_docs/ad-networks/research/setupad.md b/content_docs/ad-networks/research/setupad.md index 03840e31..6af7e4c7 100644 --- a/content_docs/ad-networks/research/setupad.md +++ b/content_docs/ad-networks/research/setupad.md @@ -1,28 +1,35 @@ # Setupad -Checked 2026-10-16. +Checked 2026-10-22. -## Joining +## Official facts -- Traffic: Not public. Older official articles conflict on visitors versus sessions, and no current publisher criteria page was found. Sources: https://setupad.com/es/blog/ezoic-vs-adsense-vs-setupad/ and https://setupad.com/es/blog/best-programmatic-advertising-platforms/. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://setupad.com/es/blog/ezoic-vs-adsense-vs-setupad/ and https://setupad.com/es/blog/best-programmatic-advertising-platforms/. Read 2026-10-16. -- Content: Follow publisher policy. Source: https://setupad.com/es/blog/best-programmatic-advertising-platforms/. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://setupad.com/es/blog/ezoic-vs-adsense-vs-setupad/ and https://setupad.com/es/blog/best-programmatic-advertising-platforms/. Read 2026-10-16. -- Must connect: Maintain ads.txt. Source: https://setupad.com/es/blog/best-programmatic-advertising-platforms/. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://setupad.com/es/blog/ezoic-vs-adsense-vs-setupad/ and https://setupad.com/es/blog/best-programmatic-advertising-platforms/. Read 2026-10-16. +Separate two products. **Setupad managed monetization** is a managed wrapper/demand service; current public pages do not provide a clear, current universal admission minimum. A Setupad requirements blog has been reported as around 100,000 monthly visitors, but other public descriptions blur “visitors” and “sessions,” so do not treat that as a verified hard rule. **Setupad Self-Serve** is software for publishers with their own Google Ad Manager account and direct SSP relationships. Its current pricing page sets plan bands of 10M+ monthly visits for Free, 10–50M for Business, and 50M+ for Enterprise. Business charges €0.05 per thousand ad requests and requires €50 prepayment; Enterprise uses a custom/postpaid fee with €1,000 minimum monthly spend. All Self-Serve applicants are reviewed for quality and significant traffic. This is a platform plan requirement, not the managed service's admission cutoff. -## Pay +## Dated publisher reports -- Official guidance lists a $100 threshold and Net 60. Methods named include bank transfer, PayPal, Payoneer, Wise, Revolut, and Paysera. Revenue share and currency are not stated in the cited pages. (Source: https://setupad.com/es/blog/best-programmatic-advertising-platforms/, read 2026-10-16.) +- **Oct 11, 2024 (Medium, firsthand)**: an anonymous Japanese publisher said its site had about 3M pageviews/month, mainly Asia with Europe and North America, and that it used Setupad for a year before returning to AdSense. The author reported integration, performance, and CPM concerns but no reliable monthly revenue. This shows one non-Tier-1-heavy site used the service; it does not reveal a current entry rule. [Review](https://medium.com/@vibrant_mango_impala_136/setupad-review-my-1-year-with-setupad-and-why-i-ultimately-switched-back-to-google-adsense-150fd77506d5) +- **2023 (Reddit)**: a publisher with 15M monthly pageviews and 99% Tier 2 traffic asked about Setupad but did not report an outcome. [Question](https://www.reddit.com/r/programmatic/comments/15yt6vh) -## Rules +## Editorial inference -- Public sources reviewed do not state exclusivity, placement control, contract length, or notice. Policy compliance and ads.txt are required in the published guidance. (Source: https://setupad.com/es/blog/best-programmatic-advertising-platforms/, read 2026-10-16.) +A publisher with 10M+ monthly visits and its own GAM/SSP stack may qualify for the current Self-Serve plans, but should not be recommended as a typical solo-blog starter. The managed service may be accessible earlier; public evidence supports only a dated, uncertain estimate near 100K visits. Keep the two paths separate in recommendation logic. Visits are not pageviews or sessions, and the checker cannot derive one from the other. -## Service +## Directory-ready corrections -- Public publisher dashboard, reporting, and support service levels were not found in these articles. (Source: https://setupad.com/es/blog/best-programmatic-advertising-platforms/, read 2026-10-16.) +- Separate managed Setupad from Self-Serve in joining details. +- Add Self-Serve plan bands and requirements with the metric “monthly visits.” +- Label the ~100K managed figure as older and unconfirmed; state that articles conflict between visitor/session wording. +- Distinguish the €0.05 ad-request CPM from the optional 20% reseller share and contract payment terms. -## Logo +## Evidence gaps -Logo source: https://setupad.com/wp-content/themes/setupad/assets/img/logo-dark.svg (read 2026-10-16) +The current official Self-Serve page gives strong plan boundaries but not an independent onboarding example. No current official managed-service traffic cutoff or country preference could be reconfirmed. The single 2024 report gives no revenue data. + +## Sources + +- [Setupad Self-Serve plans](https://setupad.com/setupad-self-serve/) — official; checked 2026-10-22; visit bands, GAM requirement, fees and approval. +- [Self-Serve application](https://signup.setupad.com/?lang=en&type=7) — official; checked 2026-10-22; application route. +- [Managed publisher guidance](https://setupad.com/blog/best-ad-networks-for-publishers/) — company article; checked 2026-10-22; historical/unclear ~100K claim and payment information; not a current hard admission rule. +- [One-year publisher review](https://medium.com/@vibrant_mango_impala_136/setupad-review-my-1-year-with-setupad-and-why-i-ultimately-switched-back-to-google-adsense-150fd77506d5) — firsthand, anonymous; published Oct 11, 2024; 3M PV, geography and exit experience. +- [15M-pageview question](https://www.reddit.com/r/programmatic/comments/15yt6vh) — publisher question; published 2023; site size and geography, no decision. diff --git a/content_docs/ad-networks/research/she-media.md b/content_docs/ad-networks/research/she-media.md index 1fdd2880..8cd92668 100644 --- a/content_docs/ad-networks/research/she-media.md +++ b/content_docs/ad-networks/research/she-media.md @@ -1,28 +1,35 @@ # SHE Media -Checked 2026-10-16. +Checked 2026-10-23. -## Joining +## Official facts -- Traffic: Not public. The reviewed official pages do not state this rule. Source checked: https://www.shemedia.com/news-updates/she-media-publisher-referral-program. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://www.shemedia.com/news-updates/she-media-publisher-referral-program. Read 2026-10-16. -- Content: Quality content. Note: The referral page describes referral eligibility, not a general applicant checklist. Source: https://www.shemedia.com/news-updates/she-media-publisher-referral-program. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://www.shemedia.com/news-updates/she-media-publisher-referral-program. Read 2026-10-16. -- Must connect: Not public. The reviewed official pages do not state this rule. Source checked: https://www.shemedia.com/news-updates/she-media-publisher-referral-program. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://www.shemedia.com/news-updates/she-media-publisher-referral-program. Read 2026-10-16. +SHE Media's current FAQ says its standard approval bar is **50,000 monthly pageviews**. It may consider a smaller site case by case when content is interesting, publishing is frequent and consistent, and growth potential is strong. The 50K figure is therefore the normal approval requirement with discretionary lower review, not merely a typical site size. Other current criteria are at least 30% US traffic, domain age of at least 90 days, original high-quality and brand-safe content, a good standing with Google ad products, and human-led content. It offers managed display, outstream video, native formats, sponsored campaigns, and creator support. The FAQ says 3–4 weeks for a response, not a final approval guarantee. Its current application asks for average monthly pageviews in Google Analytics, current ad networks, and publishing platform; it says Wix-built sites are ineligible and requests GA authorization to verify pageviews. Current terms say Net 35. Existing member guide (updated March 2023) says 75% share and $20 minimum; newer international guidance describes additional payout routes, so keep those older figures dated. -## Pay +## Dated publisher reports -- Revenue share, payment schedule, and general payment threshold are not public in the sources reviewed. For international publishers, SHE Media lists PayPal for earnings under $1,000/month, Wise/ACH, and wire transfer preferred above $1,000. Payoneer is not approved. Currency is not stated. (Source: https://support.shemedia.com/hc/en-us/articles/35987097977627-Payment-Options-for-Publishers-Outside-the-US, read 2026-10-16.) +- **Oct 2020 (publisher blog)**: a lifestyle-blog owner reported $124 for a month at 25.5K sessions. This is below the standard 50K pageview figure but sessions and pageviews are different measures; the report is historical and does not prove SHE accepted the site below the rule or that the month was representative. [Review](https://imperfectidealist.com/she-media-review/) +- Targeted searches found few recent independent accounts with an application decision and explicit pageviews; vendor member stories do not fill that gap. -## Rules +## Editorial inference -- Public exclusivity, ad placement control, content restrictions, term, and notice were not found in the reviewed publisher help page. (Sources: https://support.shemedia.com/hc/en-us/articles/35987097977627-Payment-Options-for-Publishers-Outside-the-US and https://www.shemedia.com/news-updates/she-media-publisher-referral-program, read 2026-10-16.) +Strong fit for US-oriented, original creator/blog content, especially sites that can support managed ad placements and value creator programs. At 25K sessions, do not recommend based on that number alone; ask for pageviews and US traffic. A smaller site may be worth an application when it clearly meets the editorial/growth exception, but there is no public lower cutoff. -## Service +## Directory-ready corrections -- The referral page describes Publisher Portal reporting for referral payouts. General dashboard reports, support response times, and tools are not public in the reviewed sources. (Source: https://www.shemedia.com/news-updates/she-media-publisher-referral-program, read 2026-10-16.) +- State 50K monthly PV as standard approval requirement, with case-by-case exceptions below. +- Add 30% US, 90-day age, Google-standing, and human-led original content checks. +- Do not reuse the old $124 / 25.5K-session example as a traffic floor or forecast. +- Qualify share, threshold, and international methods by the dated guide/support article. -## Logo +## Evidence gaps -Logo source: https://images.squarespace-cdn.com/content/v1/60d5f8090a1c2602ed32d58c/1629918603193-WYFZF49ZS3ODUB806NH3/SHE+Media_Logo_Full_RGB.png (read 2026-10-16) +No current exact payout share for every revenue type or recent independent sub-50K PV approval was found. The 2020 report uses sessions rather than PV. + +## Sources + +- [Publisher application](https://apply.shemedia.com/) — official; checked 2026-10-23; collects GA pageviews, current ad networks and platform; excludes Wix sites and requests GA authorization. +- [Partner FAQ](https://www.shemedia.com/partner-network/faqs) — official; checked 2026-10-22; standard and discretionary traffic conditions, geography, age, content, timing and products. +- [Member guide](https://www.shemedia.com/member-spotlight/member-guide-for-partners) — official; updated March 2023; share and payout minimum; date qualification matters. +- [International payout methods](https://support.shemedia.com/hc/en-us/articles/35987097977627-Payment-Options-for-Publishers-Outside-the-US) — official help; updated Apr 2025; non-US method details. +- [Lifestyle publisher review](https://imperfectidealist.com/she-media-review/) — firsthand publisher blog; published about 2020; October earnings and session count. diff --git a/content_docs/ad-networks/research/snack-media.md b/content_docs/ad-networks/research/snack-media.md index 61374549..102dbdbf 100644 --- a/content_docs/ad-networks/research/snack-media.md +++ b/content_docs/ad-networks/research/snack-media.md @@ -1,28 +1,33 @@ # Snack Media -Checked 2026-10-16. +Checked 2026-10-22. -## Joining +## Official facts -- Traffic: Not public. The reviewed official pages do not state this rule. Source checked: https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf. Read 2026-10-16. -- Content: No hateful, pornographic, illegal, or infringing content. Source: https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf. Read 2026-10-16. -- Must connect: Share live traffic stats and install network tags. Note: Tags must be live within 14 days of the agreement date. Source: https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf. Read 2026-10-16. +Snack Media's current publisher page offers both fully managed monetization and bespoke setups where publishers keep their own wrapper and use Snack demand. Its roots and strongest public positioning are sports publishing, sports rights-holders, and sports/entertainment communities, but it presents its services as publisher-wide. The 2025 standard agreement publishes no universal traffic minimum or revenue share; the cover sheet sets the commission and initial/renewal term. The contract requires traffic-stat access and network tags live within 14 days. It excludes hateful, pornographic, illegal, and infringing material. The standard agreement appoints Snack as exclusive provider of its defined Services during the term and grants it exclusive rights for defined ad/content sales activity; publishers should confirm the practical scope in the cover sheet. Payment is due within 30 days after the end of the month when Snack has received advertiser/licensee funds in full, so payment timing depends on advertiser payment. Referral-program criteria of 1M impressions apply to referral eligibility only, not general admission. -## Pay +## Dated publisher reports -- The signed cover sheet sets the revenue share. Public standard terms do not publish one rate, threshold, method, or currency. Payment is due within 30 days after the month when Snack Media receives the advertiser revenue. The older publisher terms say £100 and Net 60, which conflict with the 2025 agreement and are treated as legacy. (Sources: https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf and https://www.snack-media.com/publisher-terms/, read 2026-10-16.) +- Targeted searches found no detailed independent Snack publisher account with traffic, application result, and revenue. Public case studies and sports-partner references are company-selected, not independent admission evidence. +- **2025 agreement**: this is a contractual description, not a publisher outcome; it is more useful than older website terms for current payout and exclusivity scope. [PDF](https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf) -## Rules +## Editorial inference -- Exclusivity applies only if agreed in the order. The contract cover sheet defines the initial term; exact length is not public. Either party can terminate with 30 days' notice. After expiry, it can renew month-to-month; older web terms are not trusted over the 2025 PDF. (Source: https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf, read 2026-10-16.) +Best fit is a sports publisher, sports community, or publisher that wants direct-sales and managed video/CTV support. The bespoke path may complement an existing wrapper; the fully managed path may replace it. Compatibility should be based on the specific service and signed scope, not the brand name alone. With no public traffic floor, use niche fit, direct-sales capacity, traffic quality, and current setup to prioritize an inquiry; do not invent a volume threshold. -## Service +## Directory-ready corrections -- Publisher dashboard, reporting, support, and extra tools were not described in the 2025 standard terms. (Source: https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf, read 2026-10-16.) +- Remove any implication that exclusivity applies only when the order says so; standard terms include scoped exclusivity, while cover-sheet terms still control service scope and commission. +- Keep 1M impressions explicitly limited to the referral offer. +- Explain payment is contingent on advertiser funds and the commission is set in the cover sheet. -## Logo +## Evidence gaps -Logo source: https://www.snack-media.com/assets/images/1080x171_Snack_Media_Group_Black.svg (read 2026-10-16) +No standard entry traffic, location preference, payout threshold, or payment method is public. No independent report with a clear acceptance range surfaced. + +## Sources + +- [Publisher services](https://www.snack-media.com/publishers/) — official; checked 2026-10-22; managed and bespoke offering. +- [2025 ad network agreement](https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf) — official contract; published Aug 2025; commission, exclusivity, setup, prohibited content, payment conditions and notice. +- [Referral program](https://www.snack-media.com/referral/) — official; checked 2026-10-22; 1M impressions for referral eligibility only. +- [About Snack Media](https://www.snack-media.com/about/) — official; checked 2026-10-22; sports-publisher roots and partner examples. diff --git a/content_docs/ad-networks/research/sovrn.md b/content_docs/ad-networks/research/sovrn.md index eb7320c9..cba0f499 100644 --- a/content_docs/ad-networks/research/sovrn.md +++ b/content_docs/ad-networks/research/sovrn.md @@ -1,28 +1,38 @@ # Sovrn -Checked 2026-10-16. +Checked 2026-10-22. -## Joining +## Official facts -- Traffic: No minimum stated. Source: https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property. Read 2026-10-16. -- Content: Not public. The reviewed official pages do not state this rule. Source checked: https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property. Read 2026-10-16. -- Must connect: Operational domain, ad-system ID, and ads.txt. Source: https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property. Read 2026-10-16. +For **Sovrn Ad Exchange**, the current official approval article says observational traffic must be **more than 100,000 visits/month**. The official sign-up guide says to create a Sovrn platform account first, then start Ad Exchange onboarding from the account; Commerce is a separate product. It requires an operational domain and ownership/ad-system proof in ads.txt; resellers/intermediaries need sellers.json. The same help material requires a currently maintained site with a recent publication (within four months), no child-directed or exclusively under-16 audience, a privacy policy, and a brand-safety policy. No country-share rule is published. “Visits” is the network's term: do not convert it into sessions, users, or pageviews. Ad Exchange is an auction/demand product that can supplement a publisher's own stack; Sovrn Commerce is a separate affiliate product and must not be merged into this requirement or payment profile. Existing public Ad Exchange payment facts list Net 45 and $25 minimum ($50 wire), with methods including PayPal, ACH, wire, eCheck/local transfer, and US check. -## Pay +## Dated publisher reports -- For Ad Exchange, payments are Net 45. The normal minimum is $25; wire threshold is $50. Methods include PayPal, US ACH, wire, eCheck/local transfer, and US check. Payout currency is USD, with some local-currency receipt options. Sovrn Commerce is a separate affiliate product with different Net 90 terms and is not included here. (Sources: https://authcore.atlassian.net/wiki/spaces/KB/pages/2693627510846 and https://knowledge.sovrn.com/kb/maintaining-your-ad-exchange-account, read 2026-10-16.) +Targeted searches did not find a recent, detailed, independent Ad Exchange publisher account giving traffic, location, and approval outcome. Results about Sovrn Commerce/affiliate links are not evidence for Ad Exchange entry. -## Rules +## Editorial inference -- The Ad Exchange approval and payment pages do not publish an exclusivity rule, ad placement control, content restrictions, term, or notice. Commerce terms are separate. (Source: https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property, read 2026-10-16.) +This is not a likely recommendation for sites below the official 100K visits/month line. Above it, it may work as supplemental programmatic demand for publishers prepared to maintain the technical ownership records and site policies. For recommendation input, ask visits separately if available; if the user only knows pageviews or sessions, mark eligibility “unknown,” not “meets.” Country share and monthly ad revenue may inform expected commercial value but are not published gates. -## Service +## Directory-ready corrections -- Sovrn's public knowledge base covers account maintenance and payments. Exact dashboard reports and support levels were not stated in the pages reviewed. (Sources: https://knowledge.sovrn.com/kb/maintaining-your-ad-exchange-account and https://authcore.atlassian.net/wiki/spaces/KB/pages/2693627510846, read 2026-10-16.) +- Correct “no minimum stated” to “more than 100,000 visits a month.” +- Add recent-content, privacy-policy, and audience-age requirements. +- Keep Ad Exchange and Commerce as separate products. +- Keep payout terms as Ad Exchange details, and qualify if a particular contract differs. -## Logo +## Evidence gaps -Logo source: https://www.sovrn.com/wp-content/themes/wptheme-vellum2024/img/sovrn-logo.svg (read 2026-10-16) +The approval help article was surfaced through official search results, but a direct open failed during this pass; record the metric as verified from the current official knowledge article/search extract, not as a page fully inspected line by line. No independent entry example was found. + +## Sources + +- [Ad Exchange sign-up guide](https://knowledge.sovrn.com/kb/how-do-i-sign-up-for-an-ad-exchange-account) — official help; checked 2026-10-22; platform account registration and next onboarding step. +- [Property approval requirements](https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property) — official help article; search result checked 2026-10-22; direct page open unavailable in this pass; traffic and ownership criteria. +- [Ad Exchange approval process](https://knowledge.sovrn.com/kb/what-is-sovrn-s-approval-process-for-the-ad-exchange) — official help; checked 2026-10-22; content recency and policy checks. +- [Ad Exchange payment methods](https://knowledge.sovrn.com/kb/how-do-i-get-paid-for-the-ad-exchange) — official help; last independently checked 2026-10-16; payment methods. +- [Ad Exchange payment thresholds](https://knowledge.sovrn.com/kb/what-is-the-minimum-payment-threshold-for-sovrn) — official help; last independently checked 2026-10-16; minimums. + +## Coordinator source check, 2026-10-23 + +The coordinator opened the complete official approval page on 2026-10-23. It states traffic exceeding 100,000 visits per month, current content within four months, and the listed transparency/quality requirements; this is no longer based only on a search excerpt. diff --git a/content_docs/ad-networks/research/sparteo.md b/content_docs/ad-networks/research/sparteo.md index 01c758de..5d8a83df 100644 --- a/content_docs/ad-networks/research/sparteo.md +++ b/content_docs/ad-networks/research/sparteo.md @@ -1,28 +1,34 @@ # Sparteo -Checked 2026-10-16. +Checked 2026-10-22. -## Joining +## Official facts -- Traffic: Not public. The reviewed official pages do not state this rule. Source checked: https://corporate.sparteo.com/. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://corporate.sparteo.com/. Read 2026-10-16. -- Content: Not public. The reviewed official pages do not state this rule. Source checked: https://corporate.sparteo.com/. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://corporate.sparteo.com/. Read 2026-10-16. -- Must connect: Not public. The reviewed official pages do not state this rule. Source checked: https://corporate.sparteo.com/. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://corporate.sparteo.com/. Read 2026-10-16. +Sparteo markets managed ad monetization and publisher technology, including display yield optimization, Actirise, Viously video, FastCMP, and analytics such as revenue, viewability, time, URL, and Core Web Vitals. Its public site, publisher privacy notice, contact routes, and W3Schools case study do not publish a general traffic, revenue, site-age, country, Google-standing, or payment rule. No public standard revenue share or payout schedule was found. The W3Schools case is company-authored; it establishes an education-publisher example, not a comparable entry threshold. The product is sales-led/managed, so the route is the current [Contact form](https://corporate.sparteo.com/contact), not a known self-serve approval form. -## Pay +## Dated publisher reports -- Sparteo says it earns money when publishers do, but it does not publish a share rate, payment timing, threshold, methods, or currency. (Source: https://corporate.sparteo.com/, read 2026-10-16.) +- **2026 (Reddit)**: a gaming publisher with 3M monthly pageviews and roughly $2K–$3K monthly revenue said it had worked for years with an ad partner selected from a list that included Playwire, Venatus, Nitro, Ascendeum, and Sparteo. The publisher did not name which partner; this is not evidence that the site used Sparteo. [Thread](https://www.reddit.com/r/adops/comments/1sjz5b7/3_million_monthly_page_views_and_23k_monthly_ad/) +- A separate Reddit post mentioning a shift to Sparteo was removed and supplied no verifiable metrics or outcome; it is not used as evidence. -## Rules +## Editorial inference -- Public exclusivity, placement control, publisher content restrictions, contract length, and notice were not found. (Source: https://corporate.sparteo.com/, read 2026-10-16.) +Likely better suited to publishers with enough scale and ad-operations needs to justify a managed optimization relationship, especially education and content portfolios. Public evidence is too thin to set an estimated entry range or to recommend it as a typical solo-blog choice. Ask about minimum commercial opportunity, countries, current GAM/header-bidding setup, and product scope. Current network is useful for compatibility context only; membership in a peer network list is not proof of Sparteo eligibility. -## Service +## Directory-ready corrections -- Sparteo describes display monetization, analytics, Actirise, Viously video, FastCMP, and reporting for revenue, viewability, time, URL, and Core Web Vitals. Specific support terms are not public. (Sources: https://corporate.sparteo.com/post/w3schools-rpm-uplift-unified-monetisation-stack and https://corporate.sparteo.com/services-privacy-notice, read 2026-10-16.) +- Replace blanket “Not public” wording with “sales-led; public entry and payment terms are not disclosed.” +- Use W3Schools only as an official education-publisher example; don't assign a pageview or revenue cutoff. +- Keep payment fields null until a current contract or official publisher help page confirms them. -## Logo +## Evidence gaps -sparteo.com returned 403 to every request on 2026-10-16, so no logo was saved. +No independent Sparteo publisher account with identified contract, traffic, country mix, and decision was found. The gaming thread cannot identify which of its named partners the author used. + +## Sources + +- [Sparteo publisher contact](https://corporate.sparteo.com/contact) — official; checked 2026-10-22; sales-led contact route. +- [Sparteo publisher services](https://corporate.sparteo.com/) — official; checked 2026-10-22; product positioning. +- [W3Schools case study](https://corporate.sparteo.com/post/w3schools-rpm-uplift-unified-monetisation-stack) — official vendor case; checked 2026-10-22; named education publisher, no comparable entry figures. +- [Publisher technology privacy notice](https://corporate.sparteo.com/services-privacy-notice) — official; checked 2026-10-22; service/data context. +- [3M-pageview gaming publisher post](https://www.reddit.com/r/adops/comments/1sjz5b7/3_million_monthly_page_views_and_23k_monthly_ad/) — anonymous firsthand report; about Apr 2026; partner identity is explicitly unresolved. diff --git a/content_docs/ad-networks/research/taboola.md b/content_docs/ad-networks/research/taboola.md index a24de72f..542fc7d4 100644 --- a/content_docs/ad-networks/research/taboola.md +++ b/content_docs/ad-networks/research/taboola.md @@ -1,28 +1,36 @@ # Taboola -Checked 2026-10-16. +Checked 2026-10-22. -## Joining +## Official facts -- Traffic: No numeric minimum stated. Source: https://pubhelp.taboola.com/hc/en-us/articles/360033751274-Taboola-Publisher-Policy. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://pubhelp.taboola.com/hc/en-us/articles/360033751274-Taboola-Publisher-Policy. Read 2026-10-16. -- Content: Comply with the Publisher Policy. Source: https://pubhelp.taboola.com/hc/en-us/articles/360033751274-Taboola-Publisher-Policy. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://pubhelp.taboola.com/hc/en-us/articles/360033751274-Taboola-Publisher-Policy. Read 2026-10-16. -- Must connect: Not public. The reviewed official pages do not state this rule. Source checked: https://pubhelp.taboola.com/hc/en-us/articles/360033751274-Taboola-Publisher-Policy. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://pubhelp.taboola.com/hc/en-us/articles/360033751274-Taboola-Publisher-Policy. Read 2026-10-16. +Taboola's new-account guide, updated October 22, 2026, directs publishers to an online form and says a team member will respond within 48 hours; this is a response target, not approval. It publishes no numeric traffic or revenue minimum. Applicants must be 18+, own and operate the site, own or license the content, follow the partner policy, and respect exclusivity against other third-party recommendation services. Publisher policy bars categories such as fake news, pornography, infringement, and criminal or threatening content. The product is a native content-recommendation widget that can supplement display advertising; it is not a full display-stack replacement. The revenue share is set in the order. Existing terms describe USD payment within 45 days after month-end; the public payment floor was not found. Most publishers use Payoneer, with country-specific exceptions. -## Pay +## Dated publisher reports -- Publisher share is set in the order. Taboola pays in USD within 45 days after month end. Payment uses Payoneer. A universal payment threshold is not public in the reviewed terms. (Source: https://www.taboola.com/policies/publisher-revshare-terms-and-conditions-1-3-US, read 2026-10-16.) +- **2026 vendor case study**: The Independent, a large UK news publisher with 63M global visitors, reported 14% more Taboola advertising revenue after adding an in-article recommendation solution. This is a named customer result but vendor-published, not an independent or typical outcome and not an entry example. [Case study](https://www.taboola.com/resources/case-studies/the-independent-uk) +- A 2023 academic review of journalism literature summarized older claims that Taboola partner sites were often described at 500K–1M monthly pageviews. The paper does not establish a current Taboola rule, and the current 2026 account guide states no numeric floor. [Paper](https://doi.org/10.1080/21670811.2023.2180403) +- Targeted searches found no recent independent publisher acceptance report with a clear traffic number. -## Rules +## Editorial inference -- The publisher terms require exclusivity for recommendation services during the agreement. The policy prohibits content including fake news, pornography, copyright violations, defamation, threats, and criminal material. The terms govern duration and termination; the exact applicable order controls. (Sources: https://www.taboola.com/policies/publisher-revshare-terms-and-conditions-1-3-US and https://pubhelp.taboola.com/hc/en-us/articles/360033751274-Taboola-Publisher-Policy, read 2026-10-16.) +Best fit is an established content publisher with recommendation inventory, meaningful engaged audience, and editorial controls—not a site seeking basic display ads only. Because no current floor is published, avoid turning historical 500K–1M claims into an official minimum. It is compatible with a separate display network if the publisher respects Taboola's exclusivity specifically against competing recommendation services. -## Service +## Directory-ready corrections -- Taboola provides publisher support resources and policy help. The reviewed public terms do not set dashboard reporting or dedicated support service levels. (Source: https://pubhelp.taboola.com/hc/en-us/articles/360033751274-Taboola-Publisher-Policy, read 2026-10-16.) +- Keep “no numeric minimum stated” and note human review plus policy compliance. +- State 48 hours as first response, not application approval. +- Clarify exclusivity applies to other third-party recommendation services. +- Label 45-day payment and Payoneer by applicable terms/location; share is order-specific. -## Logo +## Evidence gaps -Logo source: https://www.taboola.com/ (read 2026-10-16) +No official traffic benchmark, payout floor, or recent independent acceptance example was found. The Independent case is a large publisher and not a typical performance benchmark. + +## Sources + +- [New account guide](https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account) — official; updated Oct 22, 2026; application, requirements and response timing. +- [Publisher policy](https://pubhelp.taboola.com/hc/en-us/articles/360033751274-Taboola-Publisher-Policy) — official; checked 2026-10-22; content conditions. +- [Publisher revenue-share terms](https://www.taboola.com/policies/publisher-revshare-terms-and-conditions-1-3-US) — official terms; checked 2026-10-22; negotiated share and timing. +- [The Independent case](https://www.taboola.com/resources/case-studies/the-independent-uk) — vendor case study; checked 2026-10-22; scale and reported uplift. +- [Journalism literature review](https://doi.org/10.1080/21670811.2023.2180403) — academic paper; published 2023; historical descriptions, not current policy. diff --git a/content_docs/ad-networks/research/teads.md b/content_docs/ad-networks/research/teads.md index 22594dc1..76488793 100644 --- a/content_docs/ad-networks/research/teads.md +++ b/content_docs/ad-networks/research/teads.md @@ -1,28 +1,36 @@ # Teads -Checked 2026-10-16. +Checked 2026-10-22. -## Joining +## Official facts -- Traffic: Not public. The reviewed official pages do not state this rule. Source checked: https://www.teads.com/media-owners. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://www.teads.com/media-owners. Read 2026-10-16. -- Content: Not public. The reviewed official pages do not state this rule. Source checked: https://www.teads.com/media-owners. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://www.teads.com/media-owners. Read 2026-10-16. -- Must connect: Not public. The reviewed official pages do not state this rule. Source checked: https://www.teads.com/media-owners. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://www.teads.com/media-owners. Read 2026-10-16. +Teads positions itself as a media-owner monetization partner across web, app, and connected TV, with premium demand and in-article/video formats. It is sales-led; the official route is a media-owner contact form. The public media-owner page and 2025 annual filing do not give a universal traffic, revenue, country, or age gate. Publisher share and payment timing are contract-specific; the filing describes negotiated publisher terms and payment windows rather than one standard. No public payout floor or method was found. Treat it primarily as supplemental demand/format or a broader media-owner partnership, not a starter managed display network. -## Pay +## Dated publisher reports -- Share is contract-specific. A Teads company filing says publisher payment terms generally range from 30 to 60 days, but it does not set one publisher contract term. Payment threshold, methods, and currency are not public in the cited sources. (Sources: https://investors.teads.com/static-files/4f470000-7ee3-4919-9e4d-506e65a44af4 and https://www.teads.com/media-owners, read 2026-10-16.) +- **Mar 2026 (Reddit)**: an Italian educational/history publisher said it had recently been approved, with nearly seven-minute average sessions and 2.7 pages per session, and had installed in-article tags but was waiting for demand activation. The post did not report pageviews, revenue, or audience geography. A commenter said an Italian client waited 11 days for demand to start, but that is secondhand and not the poster's own result. [Thread](https://www.reddit.com/r/adops/comments/1rr1frr/anyone_working_with_teads_and_what_are_your/) +- **2024 (Reddit)**: a local blog owner reported 1M monthly pageviews and said a peer in the same market and niche used Teads among other in-house programmatic partners. The peer's actual Teads contribution is not known. [Thread](https://www.reddit.com/r/adops/comments/1fc8jhp/) +- Teads's public filing names premium media-owner relationships but does not provide a publisher admission example with traffic or revenue. -## Rules +## Editorial inference -- Teads describes editorial controls and publisher control over ad blocking, but public exclusivity, content restrictions, contract length, and notice were not found. Confirm them in the publisher contract. (Source: https://www.teads.com/media-owners, read 2026-10-16.) +Most promising for publishers with substantial editorial inventory, video/outstream opportunities, or an established ad-ops/sales operation. High engagement and country mix may help a sales conversation, but neither is a published gate. A site with an existing stack should ask whether the proposed Teads tags are additive or exclusive for particular formats. No estimated traffic band is supported by current official rules. -## Service +## Directory-ready corrections -- Teads offers premium ad placement across web, CTV, and apps, and content extension. The media-owner page describes partnership support but not dashboard/reporting service levels. (Source: https://www.teads.com/media-owners, read 2026-10-16.) +- Keep traffic and payout thresholds unpublished; add “sales-led media-owner partnership.” +- Present Teads as supplemental video/premium demand unless the contract specifies a broader managed role. +- Do not use the 1M-PV peer report as Teads acceptance evidence. +- Note that tag installation and initial demand activation can be separate steps. -## Logo +## Evidence gaps -Logo source: https://www.teads.com/wp-content/uploads/2025/04/cropped-teads-motif-center-avatar-192x192.png (read 2026-10-16) +No public standard revenue share, payment terms, minimum, or country mix was found. The only recent acceptance account lacks PV and revenue data. + +## Sources + +- [Media owners](https://www.teads.com/media-owners) — official; checked 2026-10-22; product and publisher positioning. +- [Contact](https://www.teads.com/teads-contact/) — official; checked 2026-10-22; sales/contact route. +- [2025 annual filing](https://www.sec.gov/Archives/edgar/data/1454938/000145493826000015/tead-20251231.htm) — company filing; filed 2026; negotiated publisher terms context. +- [Italian education publisher discussion](https://www.reddit.com/r/adops/comments/1rr1frr/anyone_working_with_teads_and_what_are_your/) — anonymous firsthand post; about Mar 2026; approval, engagement, activation delay. +- [Local blog comparison](https://www.reddit.com/r/adops/comments/1fc8jhp/) — anonymous firsthand publisher post; about Sep 2024; 1M PV and a peer's multi-partner stack, not a confirmed Teads result. diff --git a/content_docs/ad-networks/research/the-moneytizer.md b/content_docs/ad-networks/research/the-moneytizer.md index 58b48641..592c7080 100644 --- a/content_docs/ad-networks/research/the-moneytizer.md +++ b/content_docs/ad-networks/research/the-moneytizer.md @@ -1,28 +1,35 @@ # The Moneytizer -Checked 2026-10-16. +Checked 2026-10-22. -## Joining +## Official facts -- Traffic: Not public. The payment simulator could not be retrieved; the official homepage was not readable as eligibility guidance. Source checked: https://www.themoneytizer.com/payment-simulator. Read 2026-10-16. -- Visitor location: Not public. The payment simulator could not be retrieved; the official homepage was not readable as eligibility guidance. Source checked: https://www.themoneytizer.com/payment-simulator. Read 2026-10-16. -- Content: Not public. The payment simulator could not be retrieved; the official homepage was not readable as eligibility guidance. Source checked: https://www.themoneytizer.com/payment-simulator. Read 2026-10-16. -- Google standing: Not public. The payment simulator could not be retrieved; the official homepage was not readable as eligibility guidance. Source checked: https://www.themoneytizer.com/payment-simulator. Read 2026-10-16. -- Must connect: Not public. The payment simulator could not be retrieved; the official homepage was not readable as eligibility guidance. Source checked: https://www.themoneytizer.com/payment-simulator. Read 2026-10-16. -- Approval time: Not public. The payment simulator could not be retrieved; the official homepage was not readable as eligibility guidance. Source checked: https://www.themoneytizer.com/payment-simulator. Read 2026-10-16. +The current US validation criteria page sets a specific gate: **at least 300,000 unique visitors from organic traffic in the 30 days before registration**, with the qualifying audience described as US, UK, and Canada. This is not pageviews, sessions, or all-source visitors. Applicants must own a domain (not a subdomain or subpage), have server access for ads.txt, and offer enough current content built over time; sites with only a few posts are rejected. The page excludes streaming, illegal downloads, copyright violations, sexual or violent material, dating, crypto, social networks, gambling, and social profiles. The US publisher homepage provides the account-registration entry point. The publisher guide requires website submission, quality review, ads.txt/tags, and consent management for EU traffic. Public terms give at least 70% of pre-tax advertiser billings and a €50 invoice floor; the US FAQ lists a $50 invoice threshold and payment 60 days after invoice, by bank transfer or PayPal. -## Pay +## Dated publisher reports -- The published payment simulator states a €50 or $50 threshold, then invoice and payment roughly two months later. The payment method and revenue share are not stated on the simulator. (Source: https://www.themoneytizer.com/payment-simulator, read 2026-10-16.) +Targeted searches did not surface a detailed, current first-hand acceptance or rejection account with unique-organic visitors, geography, and site age. A 2024 Reddit question about The Moneytizer did not include the author's own site metrics or an application result. [Question](https://www.reddit.com/r/adops/comments/1hfvqpy/is-the-moneytizer-a-good-company-for-publishers/) -## Rules +## Editorial inference -- Publisher exclusivity, placement control, content restrictions, contract term, and notice were not found in the cited payment information. (Source: https://www.themoneytizer.com/payment-simulator, read 2026-10-16.) +This is a potential managed primary option only for sites that can actually verify the exact organic-unique visitor count and qualifying countries. The current checker inputs of pageviews, visits/sessions, and Tier 1 share do not contain that measure. Do not derive unique visitors from sessions or pageviews, and do not infer organic share from current-network status. Ask for country-level organic unique users in the prior 30 days; if unavailable, mark eligibility unknown. -## Service +## Directory-ready corrections -- The payment simulator and site do not describe dashboard, reporting, support, or extra tools in enough detail to report them here. (Source: https://www.themoneytizer.com/payment-simulator, read 2026-10-16.) +- Replace “no numeric minimum” with the exact 300K unique organic visitors in the prior 30 days, US/UK/CA scope. +- State domain ownership/server access and content exclusions. +- Keep at least 70% and the €50/$50 payout threshold distinct from admission. +- Use the US account route for this criteria page, not a generic payment simulator. -## Logo +## Evidence gaps -Logo source: https://cdn.themoneytizer.fr/global/img/logomoneytizer.png (read 2026-10-16) +No independently reported application outcome was found. The page says “as of this year” but does not display a version date; source recency is checked 2026-10-22, not a verified policy effective date. + +## Sources + +- [US publisher sign-up](https://us.themoneytizer.com/) — official; checked 2026-10-22; account-registration entry point. +- [Validation criteria](https://us.themoneytizer.com/faq/validation-criteria) — official; checked 2026-10-22; exact traffic metric, countries, domain, content and technology restrictions. +- [Publisher guide](https://us.themoneytizer.com/publisherguide) — official; checked 2026-10-22; account registration, review, tags and consent setup. +- [Publisher terms](https://www.themoneytizer.com/cgu) — official terms; checked 2026-10-22; revenue share and euro payout threshold. +- [US payment FAQ](https://us.themoneytizer.com/category/payments-invoices) — official; checked 2026-10-22; US invoice and payment timing. +- [2024 publisher question](https://www.reddit.com/r/adops/comments/1hfvqpy/is-the-moneytizer-a-good-company-for-publishers/) — publisher discussion; Dec 2024; no author metrics or decision. diff --git a/content_docs/ad-networks/research/venatus.md b/content_docs/ad-networks/research/venatus.md index bfb610eb..a1879d8e 100644 --- a/content_docs/ad-networks/research/venatus.md +++ b/content_docs/ad-networks/research/venatus.md @@ -1,28 +1,37 @@ # Venatus -Checked 2026-10-16. +Checked 2026-10-22. -## Joining +## Official facts -- Traffic: Not public. The reviewed official pages do not state this rule. Source checked: https://www.venatus.com/ and https://info.venatus.com/en/signup. Read 2026-10-16. -- Visitor location: Not public. The reviewed official pages do not state this rule. Source checked: https://www.venatus.com/ and https://info.venatus.com/en/signup. Read 2026-10-16. -- Content: Not public. The reviewed official pages do not state this rule. Source checked: https://www.venatus.com/ and https://info.venatus.com/en/signup. Read 2026-10-16. -- Google standing: Not public. The reviewed official pages do not state this rule. Source checked: https://www.venatus.com/ and https://info.venatus.com/en/signup. Read 2026-10-16. -- Must connect: Not public. The reviewed official pages do not state this rule. Source checked: https://www.venatus.com/ and https://info.venatus.com/en/signup. Read 2026-10-16. -- Approval time: Not public. The reviewed official pages do not state this rule. Source checked: https://www.venatus.com/ and https://info.venatus.com/en/signup. Read 2026-10-16. +Venatus offers managed ad monetization and publisher sales support, with strongest public positioning around gaming, sports, and entertainment. Its publisher contact page invites prospective partners to speak with its team; no public traffic, revenue, age, or country minimum was found. Official brand-safety rules require a human audit and publisher terms, and exclude hate speech, promotion/sale of drugs, tobacco or firearms, illegal file sharing/downloads/streaming or hacking, and adult content. Revenue share, payment schedule, threshold, and methods are contract-specific or not publicly stated. Treat it as sales-led and niche-focused rather than a transparent self-serve starter network. -## Pay +## Dated publisher reports -- Revenue share, payment timing, threshold, methods, and currency are not public in the reviewed publisher pages. (Source: https://www.venatus.com/, read 2026-10-16.) +- **May 2026 (Reddit)**: an HTML5 gaming publisher using Playwire said 50–60% of its traffic was Tier 1 and described 10M impressions/35M requests in its best month while comparing Venatus with Publisher Collective. A commenter said they had moved from Publisher Collective to Venatus in January but gave no traffic or results. The figures belong to the original Playwire user, not the Venatus customer. [Thread](https://www.reddit.com/r/adops/comments/1sza527/venatus_vs_publisher_collective/) +- **May 1, 2025 (Trustpilot)**: a gaming-site publisher said it had used Venatus for four months and saw about three times its previous AdSense RPM. No pageviews, country mix, or revenue were given; Trustpilot showed only five total reviews and none in the prior 12 months at this check. [Review page](https://www.trustpilot.com/review/www.venatus.com) +- **2024 (Reddit)**: a gaming-site owner reported a difficult Venatus experience and low monetization in parts of the EU/JP mix, but did not give reliable comparable figures. [Thread](https://www.reddit.com/r/adops/comments/16cn3mu) -## Rules +## Editorial inference -- Venatus describes curated demand and ad management but does not publish publisher exclusivity, placement control, content restrictions, contract length, or notice. (Source: https://www.venatus.com/, read 2026-10-16.) +Best fit is a sizable gaming, sports, or entertainment publisher with brand-safe inventory and a reason to use niche direct demand or managed ad operations. An existing gaming network is only a comparison signal, not proof of eligibility. Ask about the country-level demand, video fill, server-side options, and contract exclusivity. No traffic range can be estimated credibly from the reports found. -## Service +## Directory-ready corrections -- Venatus describes expert publisher teams and ad management. Dashboard and reporting details are not public in the reviewed pages. (Sources: https://www.venatus.com/ and https://info.venatus.com/en/signup, read 2026-10-16.) +- Replace generic “Not public” content field with human-audit requirements and the listed prohibited content. +- Keep traffic, geography, share, payment terms, and thresholds unpublished. +- Add sales-led application route and gaming/sports/entertainment fit. +- Separate Venatus customer metrics from the original poster's Playwire metrics in comparison threads. -## Logo +## Evidence gaps -Logo source: https://cdn.prod.website-files.com/625ecf3842ad2419f8758d34/65868f514eec6dba61c6db26_Vectors-Wrapper.svg (read 2026-10-16) +No public numeric admission floor or independent entry example with pageviews/revenue and decision was found. Trustpilot evidence is sparse and mixed; the sole positive report lacks scale. + +## Sources + +- [Publisher contact](https://www.venatus.com/contact/for-publishers) — official; checked 2026-10-22; contact route. +- [Brand safety](https://www.venatus.com/brand-safety) — official; checked 2026-10-22; human audit and exclusion rules. +- [Venatus signup](https://info.venatus.com/en/signup) — official; checked 2026-10-22; publisher lead form. +- [Publisher Collective comparison](https://www.reddit.com/r/adops/comments/1sza527/venatus_vs_publisher_collective/) — anonymous firsthand discussion; about May 2026; gaming context and one migration report without results. +- [Trustpilot reviews](https://www.trustpilot.com/review/www.venatus.com) — user-submitted; checked 2026-10-22; May 2025 positive report, sparse sample. +- [Gaming publisher complaint](https://www.reddit.com/r/adops/comments/16cn3mu) — anonymous firsthand post; published 2023; qualitative report without traffic/revenue scale. diff --git a/content_docs/ad-revenue-calculator/research.md b/content_docs/ad-revenue-calculator/research.md new file mode 100644 index 00000000..92d6a45c --- /dev/null +++ b/content_docs/ad-revenue-calculator/research.md @@ -0,0 +1,43 @@ +# Ad revenue calculator: research + +Only what changes the tool. Checked 2026-10-23. + +## Who searches and what they ask + +- Bloggers and content-site owners on AdSense, Ezoic, Journey, Mediavine, or Raptive. They know their monthly pageviews (or sessions) from analytics, and their RPM or CPM from their ad dashboard. +- Three questions, one per tab: + 1. "At my traffic and RPM, what would I make a month and a year?" + 2. "My network shows CPM. What does that mean per pageview?" (CPM vs RPM is one of the most common publisher explainers.) + 3. "I made $X from Y pageviews. What's my RPM?" +- Many networks (Mediavine, Raptive, MonetizeMore) report session RPM, not page RPM. People mix the two, so the tool must say which one it is everywhere. + +## Formulas (primary source) + +- Google AdSense: RPM = estimated earnings ÷ page views (or impressions) × 1,000. Example: $0.15 from 25 page views is a $6.00 page RPM. Source: https://support.google.com/adsense/answer/190515 +- Session RPM is the same with sessions in place of pageviews. MonetizeMore example: $120.68 from 54,403 sessions is $2.22. Source: https://www.monetizemore.com/blog/what-is-rpm-session-page-ad/ +- CPM is per 1,000 ad impressions. Revenue = CPM × impressions ÷ 1,000. With impressions = traffic × impressions per pageview, RPM = CPM × impressions per pageview (or per session). Follows from the two definitions above. +- Network RPM figures are usually net of the network's share (AdSense shows earnings after Google's cut). Content note, not an input. + +## Competitors tried + +- Pelcro RPM calculator: revenue ÷ traffic × 1,000 only. One direction. https://www.get.pelcro.com/tools/rpm-calculator +- PhysiologyWeb AdSense calculator: solve any blank cell. Flexible, but a dated grid with no page vs session choice. https://www.physiologyweb.com/calculators/google_adsense_revenue_calculator.html +- Refinery89: asks niche, country, time on page, ad units, then returns a network estimate. A sales form; invents the RPM. https://refinery89.com/meet-refinery89-ad-revenue-calculator/ +- AdRevHub / AdCalc: visitors × pages per visitor × ads per page × CPM. Asks for numbers people have to work out. + +Gaps this tool fills: all three directions in one place, page or session RPM named throughout, monthly and yearly side by side, and no made-up RPM. + +## What we leave out + +- Benchmarks or "typical RPM" ranges. Sources measure different things (page vs session, net vs gross, niche, country). Unknown beats fake precision. +- Fill rate, CTR, CPC, viewability, niche, and country. They need numbers people don't have, or they invent the answer. +- Currencies. The math is the same in any currency; the tool shows `$` because ad networks report in USD. + +## Search words + +1. **Main phrase:** "RPM calculator" and "ad revenue calculator". "CPM to RPM calculator" also brings in engine and machinery searches, so the page title leads with ad revenue. +2. **Words they add:** free, blog, website, page RPM, monthly. +3. **Questions:** what is RPM, CPM vs RPM, how to calculate RPM, page RPM vs session RPM, what's a good RPM. +4. **The gap:** most calculators work one way only, mix page and session RPM, or invent an RPM from niche and country. + +Also checked for the copy: Mediavine calculates RPM per 1,000 sessions (https://www.mediavine.com/why-does-my-rpm-change/), and AdSense reports earnings after Google's revenue share (https://support.google.com/adsense/answer/180195). diff --git a/content_docs/ad-revenue-calculator/tool-spec.md b/content_docs/ad-revenue-calculator/tool-spec.md new file mode 100644 index 00000000..6b35a97f --- /dev/null +++ b/content_docs/ad-revenue-calculator/tool-spec.md @@ -0,0 +1,62 @@ +# Ad revenue calculator + +Route: `/ad-revenue-calculator`. Family: `tool`. Catalog: Publisher tools. Research: [research.md](research.md). + +## Who and why + +Bloggers and content-site owners with ads. They bring one of three questions: what will I earn at this RPM, what RPM does my CPM give, and what RPM am I getting now. They get monthly and yearly numbers side by side, labeled as page or session RPM. + +## Inputs + +Three tabs. No Advanced section. Traffic is per month and shared by all tabs, with its unit. Switching tabs keeps every value. + +One unit choice, Pageviews or Sessions, drives the whole tool. In CPM to RPM it shows on two fields, ad impressions and traffic. Changing either one changes the other, so impressions and traffic always use the same unit. + +| Tab | Label | Required | Hint | Changes | +| --- | --- | --- | --- | --- | +| All | Monthly traffic: number + `Pageviews` / `Sessions` select | Revenue, Find RPM: yes. CPM to RPM: optional | One month, from your analytics or ad dashboard. | Revenue, and every `Page` / `Session` label | +| Revenue | Page RPM (Session RPM), `$` | yes | What you earn per 1,000 pageviews (sessions). | Revenue | +| CPM to RPM | CPM, `$` | yes | What you earn for every 1,000 ad impressions, after your network's cut. | RPM | +| CPM to RPM | Ad impressions: number + `per pageview` / `per session` select | yes | Ads that load on an average page (in an average visit). | RPM, and the shared unit | +| Find RPM | Monthly ad revenue, `$` | yes | Ad earnings for the same month as the traffic. | RPM | + +Layout: Revenue and Find RPM put their two fields on one row. CPM to RPM puts CPM and ad impressions on the first row, and monthly traffic alone on the row below. + +Button per tab: `Calculate revenue`, `Calculate RPM`, `Find RPM`. Quiet `Reset` beside it. `Share` on the result. + +## Result + +- Revenue tab: Monthly revenue and Yearly revenue as two big numbers side by side. Under them, one working line. +- CPM to RPM tab: Page RPM big, with the working line. Then Monthly and Yearly revenue side by side, and monthly / yearly ad impressions as small numbers. Traffic blank: the revenue pair shows `—`. +- Find RPM tab: Page RPM big, with the working line. Then Monthly and Yearly revenue side by side. +- No chart: every relationship here is one multiplication, so a chart would repeat the numbers. + +Example (opens filled, result marked `Example`): 50,000 pageviews a month. + +| Tab | Inputs | Result | +| --- | --- | --- | +| Revenue | $12.00 Page RPM | $600.00 a month, $7,200.00 a year | +| CPM to RPM | $3.00 CPM, 4 ad impressions per pageview | $12.00 Page RPM, $600.00 / $7,200.00, 200,000 / 2,400,000 impressions | +| Find RPM | $600.00 ad revenue | $12.00 Page RPM, $600.00 / $7,200.00 | + +## How it works + +- Revenue = traffic × RPM ÷ 1,000. Yearly = monthly × 12. +- RPM = CPM × ad impressions per pageview (or session). CPM is the publisher's CPM after the network's cut, so every result is what the publisher is paid. Impressions = traffic × impressions per unit. +- RPM = revenue ÷ traffic × 1,000. +- Sources: [AdSense RPM](https://support.google.com/adsense/answer/190515), [MonetizeMore session RPM](https://www.monetizemore.com/blog/what-is-rpm-session-page-ad/). +- Money in cents with exact integer math, shown to 2 decimals, rounded half up. RPM shown to 2 decimals; under $0.01 shows `Under $0.01`. +- Validation, per field, on press: traffic a whole number 0 to 10,000,000,000 (above 0 in Find RPM); money 0 to 100,000,000 with up to 2 decimals; impressions per unit 0 to 1,000 with up to 2 decimals. Commas and `$` stripped. Errors name the field and the limit. The last good result stays, stepped back. + +## Build + +- `lib/ad-revenue-calculator/engine.ts`: `AD_REVENUE_EXAMPLE_INPUT`, `calculateAdRevenue(input)` → `{ status, errors, values }` for the active tab, `adRevenueShareParams`, `adRevenueInputFromQuery`. +- `app/(site)/(tools)/ad-revenue-calculator/`: `page.tsx`, `layout.tsx`, `ad-revenue-calculator.tsx`, `ad-revenue-calculator-from-url.tsx`, module CSS, `content/*.mdx`, `art/`. +- Shared: `ToolWorkbench`, `ToolFieldRow`, `ToolResult`, `UiQuantityInput` (traffic), `UiTextField` with `$` (money), `UiPrimaryResult`, `UiMetricGroup`, `UiShareAction`, `UiButton`, `UiStatus`. Tabs: `UiTabs`, extended with an optional controlled `value` / `onChange` so a share link can open a tab. +- Share params: `tab`, `traffic`, `unit`, `rpm`, `cpm`, `ipu`, `revenue`. Only the active tab's fields go in the link. +- Test: `tests/pages/ad-revenue-calculator/ad-revenue-calculator.test.mjs`, the example on each tab, sessions labels, rounding, zero traffic, and invalid input. + +## Page + +- Route `/ad-revenue-calculator`, primary catalog `publisher-tools`. +- Card art idea: a stack of page sheets feeding a coin jar, with a small `÷ 1,000` tag. diff --git a/content_docs/publisher-tools/brief.md b/content_docs/publisher-tools/brief.md new file mode 100644 index 00000000..098f8998 --- /dev/null +++ b/content_docs/publisher-tools/brief.md @@ -0,0 +1,32 @@ +# Publisher tools + +Route: `/publisher-tools`. Family: `catalog`. Development only until release authorization. + +## Reader and task + +Solo bloggers and content-site owners deciding which ad networks to investigate. They need to check published joining rules, see which network another site uses, and compare the networks themselves. + +## Page plan + +- Use the existing catalog route, shared shell, cards, and left catalog sidebar. +- Intro: start with the reader's decision and the two available checks. +- Article: a short question-to-tool table, then why a good fit is an estimate and not an approval. +- Link the ad networks directory as the next comparison step. Do not promise earnings estimates, acceptance odds, or traffic estimates. +- No quantitative chart: there are no catalog-level measurements to show. + +## Initial membership + +1. `ad-network-requirements-checker`, primary catalog. +2. `ad-network-checker`, move its primary catalog from Domain tools to Publisher tools. Keep any useful existing secondary memberships only after reviewing them in development. + +## Publication fields + +- H1: `Free publisher tools for choosing an ad network` +- SEO title: `Free publisher tools: check ad networks and requirements` +- SEO description: `Find which ad networks to apply to, best first, and check which networks other sites use. Compare joining rules, sources, and real sites in your niche.` +- Card name: `Publisher tools` +- Card description: `Check ad network requirements and see which networks other sites use.` +- Icon: use a registered publishing-related icon. +- Art brief: a small browser page beside two different gates, one with a measuring mark and one showing a tag. One simple drawing that represents choosing where a content site fits. Integration owns final marker art and registered key. + +Integration will include the catalog registry, cards, ordered memberships, and art in the tool's development publish manifest. Review both catalog cards and links in both themes at desktop and mobile widths. diff --git a/content_docs/tool-copy-rewrite.md b/content_docs/tool-copy-rewrite.md index 0e18ef45..4bc437c9 100644 --- a/content_docs/tool-copy-rewrite.md +++ b/content_docs/tool-copy-rewrite.md @@ -1,6 +1,6 @@ # Tool copy rewrite -Rewrite every tool page in the new writing style, one catalog at a time. Follow `stack127_docs/writing-style.md` and `skills/stack127/tools/stack127-tool-writing/SKILL.md`. +Rewrite every tool page in the new writing style, one catalog at a time. Follow `stack127_docs/writing-style.md` and `skills/stack127/stack127-tool-copywriting/SKILL.md`. - Drafts go in `/home/teja/stack127-drafts/tool-rewrites//`. - Each catalog section also lists the catalog page itself, for its intro and card copy. diff --git a/dev-space/ad-networks-data-contract.md b/dev-space/ad-networks-data-contract.md index 6004456f..f722dd8a 100644 --- a/dev-space/ad-networks-data-contract.md +++ b/dev-space/ad-networks-data-contract.md @@ -7,7 +7,7 @@ Development checked 2026-10-16: 45 networks; 35,816 unique listed sites; 35,719 Shared rules: - `listed` includes confirmed and stale links; confirmed site totals count a site once if any link is confirmed. Network totals count that network's links. Percentages are 0 to 100. -- Niche comparisons need at least **100 classified sites and 80% classification coverage**, in the comparison's scope. A niche page returns null before the whole-directory gate passes. The separate publication rule remains 500 sites for indexing. +- Niche comparisons need at least **100 classified sites**. Sites still waiting for the weekly niche sort don't hide published niche pages (the 80% coverage rule was removed on Oct 23, 2026). A niche page returns null before the whole-directory gate passes. The separate publication rule remains 500 sites for indexing. - Other enrichment columns/series appear when at least one value exists in their scope. Missing cells can say “Not listed”. No missing datum becomes zero. All-unknown manager groups hide. - Trends contain exact month-end observations only and require two points. No interpolation. `change_year` requires a snapshot on the exact year-ago date (February 28 for a leap-day anniversary). Keep the “sites in a year” label only with that field. `change_90_days` requires a 90-day-old snapshot. Market `net_change` then counts observed joins minus departures, excluding imports. - Movement/newest/weekly arrival counts exclude `baseline`. Switches require one unambiguous manager departure/arrival within seven days. Current overlapping networks never imply a switch. diff --git a/lib/ad-network-requirements/engine.ts b/lib/ad-network-requirements/engine.ts new file mode 100644 index 00000000..8c73a333 --- /dev/null +++ b/lib/ad-network-requirements/engine.ts @@ -0,0 +1,287 @@ +import { getAdNetworkNiche } from "../ad-network-niches.ts"; +import { estimateMeasures } from "./estimate.ts"; +import { adNetworkProfiles } from "./profiles.ts"; +import type { AdNetworkProfile, BarFact, Basis, CountryCode, GrowthTarget, InputErrorCode, InputKey, Interval, MeasureKey, Measures, ProfileRequirement, ProgramProfile, Recommendation, RecommendationInput, RecommendationResult, ScaleRoute } from "./types.ts"; + +const countryCodes: CountryCode[] = ["US", "GB", "CA", "AU", "NZ"]; +const ageBands = { lt3m: [0, 3], "3to6m": [3, 6], "6to12m": [6, 12], gt12m: [12, Infinity] } as const; +const currentOptions = new Set([...adNetworkProfiles.map(p => p.slug), "snigel", "none", "other"]); +const evidenceWeights = { high: 1, medium: 0.9, low: 0.75 }; +const accessWeights = { open: 1, form: 0.95, contact: 0.8, invite: 0.6 }; +const nativeWidgets = new Set(["mgid", "revcontent", "taboola"]); +const exclusive = new Set(["raptive", "mediavine", "she-media", "newor-media", "playwire", "freestar"]); +const core = new Set(["tech", "gaming", "crafts", "education", "sports", "health-fitness"]); +const lexical = (a: string, b: string) => a < b ? -1 : a > b ? 1 : 0; +const clamp = (v: number, lo: number, hi: number) => Math.max(lo, Math.min(hi, v)); +const round = (n: number) => Math.round((n + Number.EPSILON) * 100) / 100; + +export function validateRecommendationInput(raw: Partial>): + { ok: true; input: RecommendationInput } | { ok: false; errors: Partial> } { + const errors: Partial> = {}; + const text = (key: InputKey) => (raw[key] ?? "").trim(); + const niche = text("niche"); + if (!niche) errors.niche = "required"; + else if (niche !== "other" && !getAdNetworkNiche(niche)) errors.niche = "invalid_choice"; + if (!text("pageviews")) errors.pageviews = "required"; + const input: RecommendationInput = { niche: niche as RecommendationInput["niche"], visitsUnit: "sessions" }; + for (const key of ["siteAge", "current"] as const) { + const value = text(key); + if (!value) continue; + if (key === "siteAge") { + if (!Object.hasOwn(ageBands, value)) errors[key] = "invalid_choice"; + else input.siteAge = value as RecommendationInput["siteAge"]; + } else if (!currentOptions.has(value)) errors[key] = "invalid_choice"; + else input.current = value; + } + const numbers: InputKey[] = ["pageviews", "visits", "tier1Share", ...countryCodes.map(c => `share${c}` as InputKey), "adRevenueMonth"]; + for (const key of numbers) { + const rawValue = text(key); + if (!rawValue) continue; + const count = key === "pageviews" || key === "visits"; + const value = rawValue.replace(/[,\s]/g, ""); + const n = Number(value), precision = count ? 0 : key === "adRevenueMonth" ? 2 : 1; + const max = count ? 10_000_000_000 : key === "adRevenueMonth" ? 100_000_000 : 100; + if (!/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)$/.test(value) || !Number.isFinite(n)) errors[key] = "not_a_number"; + else if (n < 0) errors[key] = "negative"; + else if (n > max) errors[key] = max === 100 ? "over_100" : "too_large"; + else if (count && !Number.isInteger(n)) errors[key] = "not_whole"; + else if (!count && (value.split(".")[1]?.length ?? 0) > precision) errors[key] = "too_many_decimals"; + else if (key.startsWith("share")) { input.shares ??= {}; input.shares[key.slice(5) as CountryCode] = n; } + else if (key === "pageviews") input.pageviews = n; + else if (key === "visits") input.visits = n; + else if (key === "tier1Share") input.tier1Share = n; + else input.adRevenueMonth = n; + } + if (input.visits !== undefined) { + const unit = text("visitsUnit") || "sessions"; + if (!["sessions", "visits", "users"].includes(unit)) errors.visitsUnit = "invalid_choice"; + else input.visitsUnit = unit as RecommendationInput["visitsUnit"]; + } + const splits = Object.values(input.shares ?? {}), total = splits.reduce((sum, n) => sum + Math.round(n * 10), 0); + if (total > 1000) errors.shareUS = "shares_over_100"; + else if (input.tier1Share !== undefined && splits.length === 5 && Math.abs(total - Math.round(input.tier1Share * 10)) > 5) errors.shareUS = "split_mismatch"; + else if (input.tier1Share !== undefined && splits.length < 5 && total > Math.round(input.tier1Share * 10) + 5) errors.shareUS = "shares_over_tier1"; + if (Object.keys(errors).length) return { ok: false, errors }; + if (splits.length === 5) input.tier1Share = total / 10; + else if (input.tier1Share !== undefined) input.tier1Share = Math.max(input.tier1Share, total / 10); + return { ok: true, input }; +} + +function userTier(measures: Measures): number | null { + const pv = measures.pageviews?.lo, rev = measures.adRevenueMonth?.lo; + if (pv === undefined && rev === undefined) return null; + const trafficTier = pv === undefined ? 0 : pv >= 2_000_000 ? 4 : pv >= 250_000 ? 3 : pv >= 50_000 ? 2 : pv >= 10_000 ? 1 : 0; + const revenueTier = rev === undefined ? 0 : rev >= 15_000 ? 4 : rev >= 3000 ? 3 : rev >= 500 ? 2 : 0; + return Math.max(trafficTier, revenueTier); +} +function pickProgram(profile: AdNetworkProfile, m: Measures): ProgramProfile { + if (profile.slug === "newor-media") return profile.programs[(m.usPageviews?.lo ?? -1) >= 420_000 ? 2 : (m.usPageviews?.lo ?? -1) >= 60_000 ? 1 : 0]; + if (profile.slug === "setupad") return profile.programs[(m.visits?.lo ?? -1) >= 10_000_000 ? 1 : 0]; + return profile.programs[0]; +} +function routesFor(profile: AdNetworkProfile, program: ProgramProfile, m: Measures, input: RecommendationInput): ScaleRoute[] { + if (profile.slug === "publisher-collective" && !core.has(input.niche)) return [{ metric: "pageviews", floor: 3_000_000, comfortable: 6_000_000, kind: "hard", official: true }]; + if (profile.slug === "clickio" && (m.tier1Share?.lo ?? 0) < 50) return program.routes.map(r => r.metric === "pageviews" ? { ...r, floor: 1_000_000, comfortable: 2_000_000 } : r); + return program.routes; +} +const barMetrics: Partial> = { pageviews: "pageviews", visits: "visits", visitors: "visitors", monthlyActiveUsers: "monthly_active_users", tier1Sessions30d: "tier1_sessions_30d", usPageviews: "us_pageviews", adRevenueMonth: "ad_revenue_month", tier1Share: "tier1_share", usShare: "us_share", monumetricShare: "tier1_share", moneytizerUniques30d: "organic_unique_visitors_30d" }; +function routeBar(profile: AdNetworkProfile, route: ScaleRoute, program: ProgramProfile): BarFact | undefined { + if (route.bar) return route.bar; + if (profile.slug === "mediavine") return profile.bars.find(b => b.metric === "ad_revenue_previous_calendar_year"); + const matches = profile.bars.filter(b => b.metric === barMetrics[route.metric] && (b.program === null || b.program === program.name || !["newor-media", "setupad"].includes(profile.slug))); + return matches.find(b => b.amount === route.floor || (b.comparator === "more_than" && b.amount !== null && Math.abs(b.amount + (b.currency ? 0.01 : 1) - route.floor) < 0.00001)) ?? matches[0]; +} +function requirementsFor(profile: AdNetworkProfile, m: Measures, input: RecommendationInput): ProfileRequirement[] { + const slug = profile.slug; + const metric = slug === "raptive" || slug === "freestar" ? "tier1Share" : slug === "monumetric" ? "monumetricShare" : slug === "she-media" ? "usShare" : slug === "publisher-collective" && !core.has(input.niche) ? "pageviews" : null; + if (!metric) return []; + const threshold = slug === "raptive" ? (m.pageviews?.lo ?? 0) >= 100_000 ? 40 : 50 : slug === "she-media" ? 30 : slug === "publisher-collective" ? 3_000_000 : 50; + const bar = profile.bars.find(b => b.metric === barMetrics[metric] && b.amount === threshold); + if (!bar) throw new Error(`Missing published requirement: ${slug} ${metric} ${threshold}`); + return [{ metric, threshold, bar }]; +} +function ageFactor(months: number | undefined, band: RecommendationInput["siteAge"]) { + if (months === undefined) return 1; + if (!band) return 0.8; + const [lo, hi] = ageBands[band]; + return lo >= months ? 1 : hi <= months ? 0.5 : 0.85; +} +function scale(route: ScaleRoute, value: Interval | undefined): number { + if (route.kind === "none") return 1; + if (route.kind === "pref") return 0.5 + 0.5 * Math.min(1, (value?.lo ?? 0) / route.comfortable); + if (!value) return route.floor <= 10_000 ? 0.5 : route.floor <= 50_000 ? 0.35 : route.floor <= 250_000 ? 0.2 : 0.05; + if (value.lo >= route.comfortable) return 1; + if (value.lo >= route.floor) return 0.85 + 0.15 * (value.lo - route.floor) / (route.comfortable - route.floor); + if (value.hi >= route.floor) return 0.6; + if (value.hi >= 0.7 * route.floor) return 0.35; + return 0.1; +} +function routePasses(route: ScaleRoute, value: Interval | undefined, lane: AdNetworkProfile["lane"]): boolean | null { + if (!value && route.metric === "adRevenueMonth") return null; + if (!value) return true; + if (route.kind === "hard" || route.kind === "editorial_gate") return value.hi >= route.floor; + if (route.kind === "soft" && lane === "main") return value.hi >= 0.5 * route.floor; + return true; +} +type Failed = { metric: MeasureKey; threshold: number; bar?: BarFact; ratio: number }; +function predicateKey(item: Failed) { + const b = item.bar; + return JSON.stringify([item.metric, b?.comparator ?? "at_least", b?.amount ?? item.threshold, b?.currency ?? null, b?.period ?? "month", b?.scope ?? null]); +} +type Candidate = { card: Recommendation; E: number; A: number; tier: number; family?: string }; +type Growth = { target: GrowthTarget; closeness: number; tier: number; E: number }; +function candidateOrder(a: Candidate, b: Candidate) { + const diff = b.card.debug.rank - a.card.debug.rank; + return (Math.abs(diff) > 1e-10 ? diff : 0) || b.E - a.E || b.A - a.A || lexical(a.card.slug, b.card.slug); +} + +export function recommendAdNetworks(input: RecommendationInput, peers: Partial> | null, profiles: AdNetworkProfile[] = adNetworkProfiles): RecommendationResult { + const measures = estimateMeasures(input), ut = userTier(measures); + const current = input.current; + const currentTier = current === "pubnation" || current === "pubgalaxy" ? 2 : current === "snigel" ? 3 : profiles.find(p => p.slug === current)?.tier; + const large = (measures.pageviews?.lo ?? 0) >= 1_000_000 || (input.adRevenueMonth ?? 0) >= 5000; + const candidates: Candidate[] = [], growth: Growth[] = []; + for (const profile of profiles) { + const program = pickProgram(profile, measures), slug = profile.slug; + const upgrade = slug === "mediavine" && (current === "journey-by-mediavine" || current === "pubnation"); + if (profile.lane === "legacy" || slug === current || (profile.family === "mediavine" && ["mediavine", "pubnation"].includes(current ?? "")) || (slug === "publisher-collective" && current === "snigel")) continue; + if ((profile.nicheGate && (input.niche === "other" || !profile.nicheGate.includes(input.niche))) || (profile.specialist && (input.niche === "other" || !profile.strong.includes(input.niche)))) continue; + if (profile.lane === "main" && currentTier !== undefined && program.tier < currentTier && !upgrade) continue; + const E = evidenceWeights[program.evidence ?? profile.evidence], A = profile.accessScore ?? accessWeights[profile.access]; + const routes = routesFor(profile, program, measures, input); + const evaluated = routes.map(route => ({ route, value: measures[route.metric], pass: routePasses(route, measures[route.metric], profile.lane), S: scale(route, measures[route.metric]) })); + let caseByCase = false; + if (slug === "she-media" && evaluated[0]?.pass === false && (measures.pageviews?.lo ?? 0) >= 25_000 && input.niche !== "other" && profile.strong.includes(input.niche)) { + evaluated[0] = { ...evaluated[0], pass: true, S: 0.5 }; caseByCase = true; + } + // Within official routes, hard beats soft on an S tie (model scenarios 5 and 6). + const passing = evaluated.filter(r => r.pass === true).sort((a, b) => b.S - a.S || Number(b.route.official) - Number(a.route.official) || Number(b.route.kind === "hard") - Number(a.route.kind === "hard")); + const failed: Failed[] = []; + if (!passing.length) { + const failing = evaluated.filter(r => r.pass === false).map(r => ({ metric: r.route.metric, threshold: r.route.floor, ratio: clamp((r.value?.hi ?? 0) / r.route.floor, 0, 1), bar: routeBar(profile, r.route, program) })).sort((a, b) => b.ratio - a.ratio); + if (!failing.length) continue; + failed.push(failing[0]); + } + const requirements = requirementsFor(profile, measures, input); + let G = profile.geography === "region" ? 0.75 : profile.geography === "tier1" ? measures.noCountryInput ? 0.8 : clamp(measures.tier1Share!.lo / 60, 0.3, 1) : 1; + for (const req of requirements) { + const value = measures[req.metric]; + if (req.metric !== "pageviews" && measures.noCountryInput) { G = Math.min(G, 0.6); continue; } + if (!value) continue; + if (value.hi < req.threshold) failed.push({ metric: req.metric, threshold: req.threshold, bar: req.bar, ratio: clamp(value.hi / req.threshold, 0, 1) }); + else if (req.metric !== "pageviews") G = Math.min(G, value.lo >= req.threshold ? 1 : 0.7); + } + if (failed.length) { + if (profile.lane === "main") { + const distinct = new Map(failed.map(f => [predicateKey(f), f])); + const closeness = [...distinct.values()].reduce((n, f) => n * f.ratio, 1); + const bar = [...distinct.values()].find(f => f.bar)?.bar; + if (closeness >= 0.2 && bar) growth.push({ target: { slug, program: program.name, bar }, closeness, tier: program.tier, E }); + } + continue; + } + if (!passing.length) continue; + const deciding = passing[0], route = deciding.route; + let S = deciding.S; + if (slug === "google-adsense") { + const pageviews = measures.pageviews?.lo ?? 0; + S *= pageviews < 25_000 ? 1 : pageviews < 100_000 ? 0.75 : pageviews < 500_000 ? 0.45 : 0.3; + } + let basis: Basis; + if (caseByCase || slug === "the-moneytizer") basis = "review_led"; + else if (route.kind === "none" || route.kind === "pref" || (slug === "newor-media" && program.name === "Elevate" && S >= 0.6)) basis = "no_minimum"; + else if ((route.kind === "editorial" || (slug === "newor-media" && program.name === "Elevate")) && S >= 0.35) basis = "review_led"; + else if (S < 0.35) continue; + else if (S < 0.6) basis = "review_led"; + else if (route.kind === "hard" && S >= 0.85 && deciding.value?.exact && requirements.every(req => measures[req.metric]?.exact) && profile.ageMonths === undefined) basis = "published_number"; + else basis = "estimate"; + const diff = program.tier - (ut ?? program.tier); + const TM = profile.lane !== "main" || ut === null ? 0.8 : diff === 0 ? 1 : diff === -1 ? 0.85 : diff === 1 ? 0.75 : diff <= -2 ? 0.55 : 0.4; + const Cc = profile.lane !== "main" || currentTier === undefined ? 0.8 : upgrade || program.tier > currentTier ? 1 : 0.7; + const count = input.niche === "other" ? undefined : peers?.[slug]; + const P = count !== undefined && count >= 5 ? Math.min(1, count / 20) : null; + const Aeff = ut === null ? A : 1 - (1 - A) * Math.max(0, (3 - ut) / 3); + const Aage = ageFactor(profile.ageMonths, input.siteAge); + const Nmult = input.niche === "other" ? 0.92 : profile.strong.includes(input.niche) ? 1 : profile.weak.includes(input.niche) ? 0.75 : 0.92; + const base = (0.4 * S + 0.2 * TM + 0.2 * G + 0.1 * Cc + (P === null ? 0 : 0.1 * P)) / (P === null ? 0.9 : 1); + const score = Math.min(E === 0.75 && S < 0.85 ? 40 : Infinity, 100 * base * E * Aeff * Aage * Nmult); + const rank = score + ({ published_number: 6, estimate: 3, no_minimum: 0, review_led: -6 }[basis]) + (upgrade ? 8 : 0) + (profile.specialist ? 5 : 0); + const checkContract = profile.lane === "add" && exclusive.has(current ?? ""); + const bar = routeBar(profile, route, program); + const reason = reasonFor(profile, route, basis, deciding.value, { upgrade, checkContract, caseByCase }, bar, input); + const estimated = new Set(); + for (const metric of [route.metric, ...requirements.map(req => req.metric), ...(profile.geography === "tier1" ? ["tier1Share" as const] : [])]) if (measures[metric] && !measures[metric]!.exact) estimated.add(metric); + const detailBars = profile.bars.filter(b => !["newor-media", "setupad"].includes(slug) || b.program === null || b.program === program.name); + // Public details cite the joining pages, while profile.sources retains the + // wider research evidence. Put the pages behind the displayed bars first. + const joiningUrls = new Set(profile.joiningSourceUrls); + const sourceUrls = [...new Set([...detailBars.map(b => b.sourceUrl).filter(url => joiningUrls.has(url)), ...joiningUrls])]; + const detailSources = sourceUrls.flatMap(url => { + const source = profile.sources.find(source => source.url === url); + return source ? [source] : []; + }); + const alsoNeeds = [...new Set([...profile.alsoNeeds, ...(program.alsoNeeds ?? [])])] + .filter(key => key !== "incubator_limited" || (measures.monthlyActiveUsers?.lo ?? 0) < 250_000); + candidates.push({ tier: program.tier, E, A, family: profile.family, card: { + slug, program: program.name, lane: profile.lane, status: basis !== "review_led" && score >= 70 ? "good_fit" : "worth_a_try", reason, + upgrade, checkContract, applyUrl: profile.applyUrl, + detail: { sources: detailSources, bars: detailBars, alsoNeeds, peers: count !== undefined && count >= 5 ? count : null, directoryHref: `/ad-networks/${slug}` }, + debug: { score, rank, basis, S, TM, G, Cc, P, Aeff, Aage, Nmult, estimated: [...estimated] }, + } }); + } + candidates.sort(candidateOrder); + const main: Candidate[] = [], families = new Set(); + for (const candidate of candidates) { + const card = candidate.card; + if (card.debug.score < 45 || !(card.lane === "main" || card.lane === "setup" && large && card.debug.S >= 0.85)) continue; + if (candidate.family && families.has(candidate.family)) continue; + if (candidate.family) families.add(candidate.family); + main.push(candidate); + } + const selected = main.slice(0, 5); + if ((!current || current === "none") && (measures.pageviews?.lo ?? 0) < 25_000) { + const adsense = main.find(c => c.card.slug === "google-adsense"); + if (adsense && !selected.includes(adsense)) selected.splice(4, 1, adsense); + } + const add: Recommendation[] = []; + if (current !== "buysellads-carbon-ads") { + let native = false; + for (const { card } of candidates) if (card.lane === "add" && card.debug.score >= 45 && !(nativeWidgets.has(card.slug) && native)) { + add.push(card); if (nativeWidgets.has(card.slug)) native = true; if (add.length === 2) break; + } + } + const setup = large ? candidates.filter(c => c.card.lane === "setup" && c.card.debug.score >= 50 && !selected.includes(c)).slice(0, 2).map(c => c.card) : []; + growth.sort((a, b) => b.closeness - a.closeness || a.tier - b.tier || b.E - a.E || lexical(a.target.slug, b.target.slug)); + const targets = growth.slice(0, 2).map(g => g.target); + const mainCards = selected.map(c => ({ ...c.card, debug: { ...c.card.debug, score: round(c.card.debug.score), rank: round(c.card.debug.rank) } })); + const publicCard = (c: Recommendation) => ({ ...c, debug: { ...c.debug, score: round(c.debug.score), rank: round(c.debug.rank) } }); + const suggestInput: InputKey | null = input.adRevenueMonth === undefined && (measures.pageviews === undefined || measures.pageviews.lo >= 20_000) ? "adRevenueMonth" : measures.noCountryInput ? "tier1Share" : !input.siteAge ? "siteAge" : null; + const lead: RecommendationResult["lead"] = mainCards.length ? { kind: "apply", slug: mainCards[0].slug, count: mainCards.length } : targets.length ? { kind: "grow", slug: targets[0].slug } : current && current !== "none" ? { kind: "no_step_up", current } : { kind: "none_stand_out" }; + return { lead, main: mainCards, more: { add: add.map(publicCard), setup: setup.map(publicCard), growth: targets }, suggestInput }; +} + +function reasonFor(profile: AdNetworkProfile, route: ScaleRoute, basis: Basis, value: Interval | undefined, flags: { upgrade: boolean; checkContract: boolean; caseByCase: boolean }, bar: BarFact | undefined, input: RecommendationInput): Recommendation["reason"] { + const values: Record = { metric: bar?.metric ?? route.metric }; + if (bar?.amount !== null && bar?.amount !== undefined) values.bar = bar.amount; + if (value?.exact) values.yours = value.lo; + if (flags.upgrade) return { code: "upgrade", values: { current: input.current! } }; + if (flags.checkContract) return { code: "check_contract", values: { current: input.current! } }; + if (profile.specialist) return { code: "niche_specialist", values: { niche: input.niche } }; + if (profile.slug === "mediavine") return { code: "revenue_signal", values: {} }; + if (flags.caseByCase) return { code: "case_by_case", values: {} }; + if (route.metric === "adRevenueMonth" && route.official) return { code: "revenue_bar", values }; + if (basis === "published_number") return { code: "published_bar", values }; + if (basis === "estimate" && route.kind === "hard") return { code: "estimated_bar", values }; + if (route.kind === "soft") return { code: "apply_guidance", values }; + if (basis === "no_minimum") return { code: "no_minimum", values: {} }; + if (route.kind === "editorial" && ["contact", "invite"].includes(profile.access)) return { code: "sales_led", values: {} }; + return { code: "fit_estimate", values: {} }; +} + +const queryFields: [string, InputKey][] = [["niche", "niche"], ["pv", "pageviews"], ["visits", "visits"], ["unit", "visitsUnit"], ["age", "siteAge"], ["t1", "tier1Share"], ["us", "shareUS"], ["gb", "shareGB"], ["ca", "shareCA"], ["au", "shareAU"], ["nz", "shareNZ"], ["current", "current"], ["rev", "adRevenueMonth"]]; +export function parseRecommendationQuery(params: URLSearchParams): { shared: boolean; raw: Partial> } { + return { shared: params.has("niche"), raw: Object.fromEntries(queryFields.flatMap(([param, key]) => params.get(param)?.trim() ? [[key, params.get(param)!]] : [])) }; +} +export function recommendationShareParams(raw: Partial>): Record { + return Object.fromEntries(queryFields.flatMap(([param, key]) => raw[key]?.trim() ? [[param, raw[key]!.trim()]] : [])); +} diff --git a/lib/ad-network-requirements/estimate.ts b/lib/ad-network-requirements/estimate.ts new file mode 100644 index 00000000..3611d63e --- /dev/null +++ b/lib/ad-network-requirements/estimate.ts @@ -0,0 +1,46 @@ +import type { CountryCode, Interval, Measures, RecommendationInput } from "./types.ts"; + +const countries: CountryCode[] = ["US", "GB", "CA", "AU", "NZ"]; +const point = (value: number): Interval => ({ lo: value, hi: value, exact: true }); +const interval = (lo: number, hi: number): Interval => ({ lo, hi, exact: false }); +const multiply = (a: Interval, b: Interval, divisor = 1): Interval => interval(a.lo * b.lo / divisor, a.hi * b.hi / divisor); + +/** Editorial ratio ranges; entered values and estimated measures stay distinct. */ +export function estimateMeasures(input: RecommendationInput): Measures { + const shares = input.shares ?? {}; + const entered = countries.filter(code => shares[code] !== undefined); + const total = entered.reduce((sum, code) => sum + Math.round(shares[code]! * 10), 0) / 10; + const noCountryInput = entered.length === 0 && input.tier1Share === undefined; + const tier1 = entered.length === 5 ? point(total) : input.tier1Share !== undefined ? point(Math.max(input.tier1Share, total)) : interval(total, 100); + function aggregate(codes: CountryCode[], prior: Interval): Interval { + const known = codes.reduce((sum, code) => sum + Math.round((shares[code] ?? 0) * 10), 0) / 10; + const unknownInside = codes.some(code => shares[code] === undefined); + const unknownOutside = countries.some(code => !codes.includes(code) && shares[code] === undefined); + if (!unknownInside) return point(known); + const lo = unknownOutside ? known : known + Math.max(0, tier1.lo - total); + const hi = known + Math.max(0, tier1.hi - total); + if (!unknownOutside && tier1.exact) return point(lo); + const intersectionLo = Math.max(lo, prior.lo), intersectionHi = Math.min(hi, prior.hi); + // A prior may narrow an interval, but never manufacture an exact point. + return intersectionLo < intersectionHi ? interval(intersectionLo, intersectionHi) : interval(lo, hi); + } + const us = aggregate(["US"], interval(tier1.lo * 0.55, tier1.hi * 0.9)); + const monumetric = aggregate(["US", "GB", "CA", "AU"], interval(Math.max(0, tier1.lo - 3), tier1.hi)); + const moneytizer = aggregate(["US", "GB", "CA"], interval(tier1.lo * 0.85, tier1.hi * 0.98)); + const result: Measures = { noCountryInput, tier1Share: tier1, usShare: us, monumetricShare: monumetric, moneytizerShare: moneytizer }; + if (input.visits !== undefined) { + result.sessions = input.visitsUnit === "users" ? interval(input.visits / 0.9, input.visits / 0.6) : point(input.visits); + } else if (input.pageviews !== undefined) result.sessions = interval(input.pageviews / 2, input.pageviews / 1.2); + if (input.pageviews !== undefined) result.pageviews = point(input.pageviews); + else if (result.sessions) result.pageviews = multiply(result.sessions, interval(1.2, 2)); + if (result.sessions) { + result.visits = { ...result.sessions, exact: input.visits !== undefined && input.visitsUnit === "visits" }; + result.visitors = input.visits !== undefined && input.visitsUnit === "users" ? interval(input.visits, input.visits) : multiply(result.sessions, interval(0.6, 0.9)); + result.monthlyActiveUsers = { ...result.visitors }; + result.tier1Sessions30d = multiply(result.sessions, tier1, 100); + result.moneytizerUniques30d = multiply(multiply(result.visitors, moneytizer, 100), interval(0.5, 1)); + } + if (result.pageviews) result.usPageviews = { ...multiply(result.pageviews, us, 100), exact: input.pageviews !== undefined && us.exact }; + if (input.adRevenueMonth !== undefined) result.adRevenueMonth = point(input.adRevenueMonth); + return result; +} diff --git a/lib/ad-network-requirements/page-data.ts b/lib/ad-network-requirements/page-data.ts new file mode 100644 index 00000000..6373244c --- /dev/null +++ b/lib/ad-network-requirements/page-data.ts @@ -0,0 +1,34 @@ +import "server-only"; +import { unstable_cache } from "next/cache"; +import { listAdNetworks, queryAdNetworkReport } from "../ad-networks"; +import { adNetworkNiches } from "../ad-network-niches.ts"; +import { AD_NETWORKS_TAG } from "../cache-tags"; +import { networkLogo } from "../../app/ui/ad-networks/network-logo-src"; +import { adNetworkProfiles } from "./profiles.ts"; +import { recommendAdNetworks } from "./engine.ts"; +import type { NicheSlug, RequirementsPageData } from "./types.ts"; + +const slugs = adNetworkProfiles.map(profile => profile.slug); +const loadPeers = unstable_cache(async (): Promise => { + const rows = (await queryAdNetworkReport<{ niche: NicheSlug; slug: string; count: number }>(` + select p.niche,n.slug,count(distinct p.id)::int as count + from public.ad_network_publishers p + join public.ad_network_publisher_relationships r on r.publisher_id=p.id and r.status='confirmed' + join public.ad_networks n on n.id=r.ad_network_id + where p.niche=any($1::text[]) and n.slug=any($2::text[]) + group by p.niche,n.slug order by p.niche,n.slug`, [adNetworkNiches.map(n => n.slug), slugs])).rows; + const peers = Object.fromEntries(adNetworkNiches.map(niche => [niche.slug, {}])) as RequirementsPageData["peers"]; + for (const row of rows) peers[row.niche][row.slug] = row.count; + return peers; +}, ["ad-network-recommendation-peers-v1"], { revalidate: false, tags: [AD_NETWORKS_TAG] }); + +export async function loadRequirementsPageData(): Promise { + const [list, peers] = await Promise.all([listAdNetworks(), loadPeers()]); + const bySlug = new Map(list.map(network => [network.slug, network])); + const networks = slugs.map(slug => { + const network = bySlug.get(slug); + if (!network) throw new Error(`Missing ad network: ${slug}`); + return { slug, name: network.name, logo: networkLogo(slug), directoryHref: `/ad-networks/${slug}` }; + }); + return { networks, peers, defaultResult: recommendAdNetworks({ niche: "food", pageviews: 40_000, visits: 22_000, visitsUnit: "sessions", siteAge: "gt12m", tier1Share: 65, current: "google-adsense", adRevenueMonth: 350 }, peers.food) }; +} diff --git a/lib/ad-network-requirements/profile-facts.ts b/lib/ad-network-requirements/profile-facts.ts new file mode 100644 index 00000000..d5da170e --- /dev/null +++ b/lib/ad-network-requirements/profile-facts.ts @@ -0,0 +1,50 @@ +// Compact source facts copied from content_docs/ad-networks/recommendation-profiles-{a,b}.json. +// Research prose and observations are intentionally excluded from the browser bundle. +import type { AdNetworkProfile } from "./types.ts"; + +export const profileFacts: Record> = { + "adapex": {"applyUrl":"https://adapex.io/get-in-touch/","bars":[],"alsoNeeds":["content_policies","own_gam"],"sources":[{"label":"Adapex: Publisher FAQ","url":"https://adapex.io/faqs/","checkedAt":"2026-10-22"},{"label":"Adapex: Contact route","url":"https://adapex.io/contact/","checkedAt":"2026-10-22"},{"label":"Adapex: publisher question","url":"https://www.reddit.com/r/adops/comments/yvtwkr","checkedAt":"2026-10-22"},{"label":"Adapex: Contact","url":"https://adapex.io/get-in-touch/","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://adapex.io/faqs/","https://adapex.io/get-in-touch/"]}, + "aditude": {"applyUrl":"https://www.aditude.com/contact","bars":[],"alsoNeeds":[],"sources":[{"label":"Aditude: Publisher platform","url":"https://www.aditude.com/","checkedAt":"2026-10-22"},{"label":"Aditude: Case studies","url":"https://www.aditude.com/case-studies","checkedAt":"2026-10-22"},{"label":"Aditude: Dexerto case study","url":"https://www.aditude.com/case-studies/dexerto","checkedAt":"2026-10-22"},{"label":"Aditude: Visual design app ad discussion","url":"https://www.reddit.com/r/adops/comments/1ozpww8","checkedAt":"2026-10-22"},{"label":"Aditude: Publisher contact","url":"https://www.aditude.com/contact","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://www.aditude.com/","https://www.aditude.com/contact"]}, + "adnimation": {"applyUrl":"https://www.adnimation.com/get-started/","bars":[{"metric":"none","comparator":"none","amount":null,"currency":null,"period":null,"scope":"all site sizes subject to review","program":"MAP","kind":"requirement","sourceUrl":"https://www.adnimation.com/map/","checkedAt":"2026-10-22"}],"alsoNeeds":["content_policies"],"sources":[{"label":"Adnimation: Publisher FAQ","url":"https://www.adnimation.com/faqs/","checkedAt":"2026-10-22"},{"label":"Adnimation: MAP program","url":"https://www.adnimation.com/map/","checkedAt":"2026-10-22"},{"label":"Adnimation: Co-founder interview","url":"https://www.adnimation.com/adnimation-co-founder-talks-plans-for-growth-with-mergermarket/","checkedAt":"2026-10-22"},{"label":"Adnimation: Case study","url":"https://www.adnimation.com/case-study/","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://www.adnimation.com/faqs/","https://www.adnimation.com/map/"]}, + "adpushup": {"applyUrl":"https://www.adpushup.com/publisher/get-started/","bars":[{"metric":"ad_revenue_month","comparator":"at_least","amount":3000,"currency":"USD","period":"month","scope":"small publisher discussion","program":null,"kind":"guidance","sourceUrl":"https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/","checkedAt":"2026-10-22"}],"alsoNeeds":["content_policies"],"sources":[{"label":"AdPushup: Onboarding","url":"https://www.adpushup.com/publisher/get-started/","checkedAt":"2026-10-22"},{"label":"AdPushup: Small-publisher article","url":"https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/","checkedAt":"2026-10-22"},{"label":"AdPushup: Terms","url":"https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf","checkedAt":"2026-10-22"},{"label":"AdPushup: Publisher roster analysis","url":"https://adxdesk.com/blog/adpushup-review/","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://www.adpushup.com/publisher/get-started/","https://www.adpushup.com/blog/best-ad-networks-for-small-publishers/","https://www.adpushup.com/wp-content/uploads/2022/04/Terms-of-Service.pdf"]}, + "amazon-publisher-services": {"applyUrl":"https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html","bars":[],"alsoNeeds":["direct_representation","exclusive","invitation_only","own_gam"],"sources":[{"label":"Amazon Publisher Services: Current UAM page","url":"https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html","checkedAt":"2026-10-22"},{"label":"Amazon Publisher Services: UAM FAQ / fee terms","url":"https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf","checkedAt":"2026-10-22"},{"label":"Amazon Publisher Services: UAM applicant report","url":"https://www.reddit.com/r/adops/comments/v0ec6t","checkedAt":"2026-10-22"},{"label":"Amazon Publisher Services: TAM/UAM use","url":"https://www.reddit.com/r/adops/comments/1mss9ei","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://publishers.advertising.a2z.com/aps/unified-ad-marketplace/index.html","https://aps.amazon.com/aps/wp-content/uploads/2023/01/aps_uam_update_011123-FINAL.pdf"]}, + "anymind-anymanager": {"applyUrl":"https://anymindgroup.com/contact/","bars":[],"alsoNeeds":[],"sources":[{"label":"AnyMind: AnyManager product","url":"https://anymindgroup.com/products/anymanager/","checkedAt":"2026-10-22"},{"label":"AnyMind: Publisher cases","url":"https://anymindgroup.com/case-study/?business=publishergrowth&pa=2","checkedAt":"2026-10-22"},{"label":"AnyMind: AnyManager terms","url":"https://anymanager.io/terms-of-service/","checkedAt":"2026-10-22"},{"label":"AnyMind: IR FAQ","url":"https://anymindgroup.com/ir/faq/","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://anymindgroup.com/products/anymanager/","https://anymanager.io/terms-of-service/"]}, + "buysellads-carbon-ads": {"applyUrl":"https://www.carbonads.net/join","bars":[],"alsoNeeds":["english","exclusive"],"sources":[{"label":"Carbon: FAQ","url":"https://www.carbonads.net/faq","checkedAt":"2026-10-22"},{"label":"Carbon: About","url":"https://www.carbonads.net/about","checkedAt":"2026-10-22"},{"label":"Carbon: Join","url":"https://www.carbonads.net/join","checkedAt":"2026-10-22"},{"label":"Carbon: Partner comparison","url":"https://www.reddit.com/r/adops/comments/1oxy825","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://www.carbonads.net/faq","https://www.carbonads.net/about","https://www.carbonads.net/join"]}, + "clickio": {"applyUrl":"https://clickio.com/contact/","bars":[{"metric":"pageviews","comparator":"at_least","amount":100000,"currency":null,"period":"month","scope":"UK, France, US, Australia, Canada","program":null,"kind":"guidance","sourceUrl":"https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards","checkedAt":"2026-10-22"},{"metric":"pageviews","comparator":"at_least","amount":250000,"currency":null,"period":"month","scope":"Italy, Spain","program":null,"kind":"guidance","sourceUrl":"https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards","checkedAt":"2026-10-22"},{"metric":"pageviews","comparator":"at_least","amount":300000,"currency":null,"period":"month","scope":"rest of Europe","program":null,"kind":"guidance","sourceUrl":"https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards","checkedAt":"2026-10-22"},{"metric":"pageviews","comparator":"at_least","amount":500000,"currency":null,"period":"month","scope":"Portugal","program":null,"kind":"guidance","sourceUrl":"https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards","checkedAt":"2026-10-22"},{"metric":"pageviews","comparator":"at_least","amount":750000,"currency":null,"period":"month","scope":"Brazil, Colombia, Mexico","program":null,"kind":"guidance","sourceUrl":"https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards","checkedAt":"2026-10-22"},{"metric":"pageviews","comparator":"at_least","amount":1000000,"currency":null,"period":"month","scope":"rest of Latin America and world","program":null,"kind":"guidance","sourceUrl":"https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards","checkedAt":"2026-10-22"},{"metric":"ad_revenue_month","comparator":"more_than","amount":500,"currency":"USD","period":"month","scope":"below regional PV guide","program":null,"kind":"requirement","sourceUrl":"https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards","checkedAt":"2026-10-22"}],"alsoNeeds":[],"sources":[{"label":"Clickio: Entry standards","url":"https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards","checkedAt":"2026-10-22"},{"label":"Clickio: Payments","url":"https://docs.clickio.com/books/get-started/page/payments-billing","checkedAt":"2026-10-22"},{"label":"Clickio: Publisher agreement","url":"https://legal.clickio.com/PublisherAgreement/","checkedAt":"2026-10-22"},{"label":"Clickio: Publisher Clickio discussion","url":"https://www.reddit.com/r/adops/comments/vi0i7e","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://docs.clickio.com/books/clickio-entry-standards/page/clickio-entry-standards"]}, + "concert": {"applyUrl":"https://www.voxmedia.com/brands/concert","bars":[],"alsoNeeds":["exclusive"],"sources":[{"label":"Concert: SSP launch","url":"https://www.voxmedia.com/2022/6/7/23157157/vox-media-concert-ssp-publisher-led-supply-side-platform-trade-desk-as-an-exclusive-launch-partner/","checkedAt":"2026-10-22"},{"label":"Concert: Publisher group","url":"https://www.voxmedia.com/about-vox-media/2018/5/31/17413008/top-digital-publishers-join-concert-to-create-largest-premium-advertising-marketplace-online/","checkedAt":"2026-10-22"},{"label":"Concert: Trade coverage","url":"https://www.marketingbrew.com/stories/2022/10/19/why-vox-media-continues-to-invest-in-ad-tech","checkedAt":"2026-10-22"},{"label":"Concert: Advertiser terms","url":"https://admanager.concert.io/terms","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://www.voxmedia.com/2022/6/7/23157157/vox-media-concert-ssp-publisher-led-supply-side-platform-trade-desk-as-an-exclusive-launch-partner/","https://www.voxmedia.com/about-vox-media/2018/5/31/17413008/top-digital-publishers-join-concert-to-create-largest-premium-advertising-marketplace-online/"]}, + "ethicalads": {"applyUrl":"https://www.ethicalads.io/publishers/","bars":[{"metric":"pageviews","comparator":"at_least","amount":50000,"currency":null,"period":"month","scope":"developer sites","program":null,"kind":"requirement","sourceUrl":"https://www.ethicalads.io/publishers/faq/","checkedAt":"2026-10-22"}],"alsoNeeds":["content_policies"],"sources":[{"label":"EthicalAds: FAQ","url":"https://www.ethicalads.io/publishers/faq/","checkedAt":"2026-10-22"},{"label":"EthicalAds: Policy","url":"https://www.ethicalads.io/publisher-policy/","checkedAt":"2026-10-22"},{"label":"EthicalAds: Guide","url":"https://www.ethicalads.io/publisher-guide/","checkedAt":"2026-10-22"},{"label":"EthicalAds: Terms","url":"https://www.ethicalads.io/terms-of-service/","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://www.ethicalads.io/publishers/faq/","https://www.ethicalads.io/publisher-policy/","https://www.ethicalads.io/publisher-guide/"]}, + "ezoic": {"applyUrl":"https://www.ezoic.com/get-started/","bars":[{"metric":"monthly_active_users","comparator":"at_least","amount":250000,"currency":null,"period":"month","scope":"new sites","program":null,"kind":"requirement","sourceUrl":"https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES","checkedAt":"2026-10-22"}],"alsoNeeds":["content_policies","google_standing","incubator_limited"],"sources":[{"label":"Ezoic: Requirements","url":"https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES","checkedAt":"2026-10-22"},{"label":"Ezoic: Incubator","url":"https://support.ezoic.com/kb/article/ezoic-incubator-program","checkedAt":"2026-10-23"},{"label":"Ezoic: Terms","url":"https://www.ezoic.com/terms","checkedAt":"2026-10-22"},{"label":"Ezoic: publisher earnings","url":"https://www.reddit.com/r/adops/comments/1ftuclz","checkedAt":"2026-10-22"},{"label":"Ezoic: Incubator rejection","url":"https://www.reddit.com/r/Blogging/comments/1uv87ne","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://support.ezoic.com/kb/article/getting-started-ezoics-requirements?id=getting-started-ezoics-requirements&lang=es-ES","https://support.ezoic.com/kb/article/ezoic-incubator-program"]}, + "freestar": {"applyUrl":"https://freestar.com/contact-us/","bars":[{"metric":"pageviews","comparator":"at_least","amount":1000000,"currency":null,"period":"month","scope":"typical publisher scale","program":null,"kind":"guidance","sourceUrl":"https://freestar.com/publisher-quality-requirements/","checkedAt":"2026-10-22"},{"metric":"tier1_share","comparator":"at_least","amount":50,"currency":null,"period":null,"scope":"US/UK/Canada/NZ/Australia","program":null,"kind":"requirement","sourceUrl":"https://freestar.com/publisher-quality-requirements/","checkedAt":"2026-10-22"}],"alsoNeeds":["content_policies","ga_access","organic_audience_50"],"sources":[{"label":"Freestar: Quality requirements","url":"https://freestar.com/publisher-quality-requirements/","checkedAt":"2026-10-22"},{"label":"Freestar: Contact/onboarding","url":"https://freestar.com/contact-us/","checkedAt":"2026-10-22"},{"label":"Freestar: publisher discussion","url":"https://www.reddit.com/r/adops/comments/bxgb6c","checkedAt":"2026-10-22"},{"label":"Freestar: comparison","url":"https://www.reddit.com/r/adops/comments/mcb34i","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://freestar.com/publisher-quality-requirements/","https://freestar.com/contact-us/"]}, + "geniee-ssp": {"applyUrl":"https://admin.genieessp.com/app/signup/en_US","bars":[],"alsoNeeds":["content_policies"],"sources":[{"label":"Geniee SSP: SSP overview","url":"https://en.geniee.co.jp/services/publishers/","checkedAt":"2026-10-22"},{"label":"Geniee SSP: Geniee Japan SSP","url":"https://geniee.co.jp/products/ssp/","checkedAt":"2026-10-22"},{"label":"Geniee SSP: Publisher terms, 2025","url":"https://geniee.co.jp/doc/terms_of_service_en20250831.pdf","checkedAt":"2026-10-22"},{"label":"Geniee SSP: English publisher terms, older","url":"https://s.geniee.jp/aladdin/resources/GenieeInternational/terms_geniee_en.pdf","checkedAt":"2026-10-22"},{"label":"Geniee SSP: Technology footprint estimate","url":"https://www.redvolcano.io/data/technologies/geniee-monetization/","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://en.geniee.co.jp/services/publishers/","https://geniee.co.jp/doc/terms_of_service_en20250831.pdf"]}, + "google-adsense": {"applyUrl":"https://www.google.com/adsense/start/","bars":[{"metric":"none","comparator":"none","amount":null,"currency":null,"period":null,"scope":"site","program":null,"kind":"guidance","sourceUrl":"https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk","checkedAt":"2026-10-22"}],"alsoNeeds":["content_policies"],"sources":[{"label":"AdSense: Eligibility","url":"https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk","checkedAt":"2026-10-22"},{"label":"AdSense: Activation and review","url":"https://support.google.com/adsense/answer/7402256?hl=en-AG","checkedAt":"2026-10-22"},{"label":"AdSense: Share","url":"https://support.google.com/adsense/answer/180195?hl=en","checkedAt":"2026-10-22"},{"label":"AdSense: Calculator-site rejection report","url":"https://www.reddit.com/r/passive_income/comments/1tyq291","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://support.google.com/adsense/answer/9724/eligibility-requirements-for-adsense?hl=en-uk","https://support.google.com/adsense/answer/7402256?hl=en-AG"]}, + "infolinks": {"applyUrl":"https://www.infolinks.com/publishers/","bars":[{"metric":"none","comparator":"none","amount":null,"currency":null,"period":null,"scope":"all sizes subject to review","program":null,"kind":"requirement","sourceUrl":"https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks","checkedAt":"2026-10-22"}],"alsoNeeds":["content_policies"],"sources":[{"label":"Infolinks: Eligibility","url":"https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks","checkedAt":"2026-10-22"},{"label":"Infolinks: Signup","url":"https://sites0001.infolinks.com/support/account/how-do-i-sign-up-as-an-infolinks-publisher","checkedAt":"2026-10-22"},{"label":"Infolinks: Payments","url":"https://sites0001.infolinks.com/support/payments/what-are-my-payment-options","checkedAt":"2026-10-22"},{"label":"Infolinks: Publisher agreement","url":"https://sites0001.infolinks.com/service-agreement","checkedAt":"2026-10-22"},{"label":"Infolinks: Publisher review page","url":"https://www.trustpilot.com/review/infolinks.com","checkedAt":"2026-10-22"},{"label":"Infolinks: Software reviews","url":"https://www.g2.com/products/infolinks/reviews","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://sites0001.infolinks.com/support/quality/what-are-the-eligibility-criteria-for-my-site-to-qualify-with-infolinks","https://sites0001.infolinks.com/support/account/how-do-i-sign-up-as-an-infolinks-publisher","https://sites0001.infolinks.com/service-agreement"]}, + "journey-by-mediavine": {"applyUrl":"https://www.journeymv.com/getting-started-with-journey-by-mediavine/","bars":[{"metric":"tier1_sessions_30d","comparator":"at_least","amount":1000,"currency":null,"period":"30_days","scope":"site","program":null,"kind":"requirement","sourceUrl":"https://www.mediavine.com/application-requirements/","checkedAt":"2026-10-22"}],"alsoNeeds":["domain_history_4_months_guidance","google_standing","grow_30_days"],"sources":[{"label":"Journey: Current requirements","url":"https://www.mediavine.com/application-requirements/","checkedAt":"2026-10-22"},{"label":"Journey: setup and terms","url":"https://www.journeymv.com/getting-started-with-journey-by-mediavine/","checkedAt":"2026-10-22"},{"label":"Journey: Approval criteria","url":"https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine/","checkedAt":"2026-10-22"},{"label":"Journey: acceptance report","url":"https://www.reddit.com/r/Blogging/comments/1ezlcpk","checkedAt":"2026-10-22"},{"label":"Journey: German Journey report","url":"https://www.reddit.com/r/Blogging/comments/1dkzgsl","checkedAt":"2026-10-22"},{"label":"Journey: application routing report","url":"https://www.reddit.com/r/adops/comments/1vn39i3","checkedAt":"2026-10-22"},{"label":"Journey: earnings report","url":"https://www.reddit.com/r/adops/comments/1wq2v87","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://www.mediavine.com/application-requirements/","https://www.journeymv.com/getting-started-with-journey-by-mediavine/","https://help.mediavine.com/what-does-it-take-to-get-approved-by-mediavine/"]}, + "media-net": {"applyUrl":"https://www.media.net/publishers","bars":[],"alsoNeeds":["content_policies","exclusive"],"sources":[{"label":"Media.net: Publisher page","url":"https://www.media.net/publishers","checkedAt":"2026-10-22"},{"label":"Media.net: Inventory policy","url":"https://www.media.net/legal/inventorypolicies/","checkedAt":"2026-10-22"},{"label":"Media.net: Publisher agreement","url":"https://www.media.net/legal/","checkedAt":"2026-10-22"},{"label":"Media.net: Publisher support complaint","url":"https://www.reddit.com/r/adops/comments/15ql4jb","checkedAt":"2026-10-22"},{"label":"Media.net: Header-bidding comparison","url":"https://www.reddit.com/r/adops/comments/ddntw5","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://www.media.net/publishers","https://www.media.net/legal/inventorypolicies/","https://www.media.net/legal/"]}, + "mediavine": {"applyUrl":"https://www.mediavine.com/application-requirements/","bars":[{"metric":"ad_revenue_previous_calendar_year","comparator":"at_least","amount":5000,"currency":"USD","period":"previous_calendar_year","scope":"site","program":null,"kind":"requirement","sourceUrl":"https://help.mediavine.com/programs-and-the-publisher-path-to-growth","checkedAt":"2026-10-22"}],"alsoNeeds":["content_policies","google_standing"],"sources":[{"label":"Mediavine: Publisher Path and previous-year revenue","url":"https://help.mediavine.com/programs-and-the-publisher-path-to-growth","checkedAt":"2026-10-22"},{"label":"Mediavine: Official criteria","url":"https://help.mediavine.com/mediavine-official","checkedAt":"2026-10-22"},{"label":"Mediavine: Revenue share","url":"https://help.mediavine.com/revenue-share","checkedAt":"2026-10-22"},{"label":"Mediavine: Payment timing","url":"https://help.mediavine.com/when-am-i-getting-paid-0","checkedAt":"2026-10-22"},{"label":"Mediavine: Official application routing discussion","url":"https://www.reddit.com/r/adops/comments/1wz7cw6","checkedAt":"2026-10-22"},{"label":"Mediavine: New Mediavine-branded account start","url":"https://www.reddit.com/r/Blogging/comments/1s7kf5e","checkedAt":"2026-10-22"},{"label":"Mediavine: Publisher reapplication complaint","url":"https://www.reddit.com/r/adops/comments/1xb1r9c","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://help.mediavine.com/programs-and-the-publisher-path-to-growth","https://help.mediavine.com/mediavine-official"]}, + "mgid": {"applyUrl":"https://www.mgid.com/publishers","bars":[{"metric":"visitors","comparator":"at_least","amount":3000,"currency":null,"period":"day","scope":"site","program":null,"kind":"requirement","sourceUrl":"https://help.mgid.com/publishers-general-information","checkedAt":"2026-10-22"},{"metric":"visitors","comparator":"at_least","amount":90000,"currency":null,"period":"month","scope":"site","program":null,"kind":"requirement","sourceUrl":"https://help.mgid.com/publishers-general-information","checkedAt":"2026-10-22"}],"alsoNeeds":["content_policies","ten_current_articles"],"sources":[{"label":"MGID: Publisher information","url":"https://help.mgid.com/publishers-general-information","checkedAt":"2026-10-22"},{"label":"MGID: Publisher terms updated July 2026","url":"https://www.mgid.com/services/publishers-tos","checkedAt":"2026-10-22"},{"label":"MGID: Brazil publisher offer","url":"https://pr.mgid.com/monetize","checkedAt":"2026-10-22"},{"label":"MGID: Publisher revenue question","url":"https://www.reddit.com/r/adops/comments/1bt3vnt","checkedAt":"2026-10-22"},{"label":"MGID: Web app inquiry","url":"https://www.reddit.com/r/adops/comments/1vkueiv","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://help.mgid.com/publishers-general-information","https://www.mgid.com/services/publishers-tos"]}, + "monetizemore-pubguru": {"applyUrl":"https://www.monetizemore.com/solutions/pubguru-premium/","bars":[{"metric":"ad_revenue_month","comparator":"at_least","amount":5000,"currency":"USD","period":"month","scope":"publisher","program":null,"kind":"requirement","sourceUrl":"https://www.monetizemore.com/solutions/pubguru-premium/","checkedAt":"2026-10-22"},{"metric":"pageviews","comparator":"at_least","amount":2000000,"currency":null,"period":"month","scope":"publisher","program":null,"kind":"requirement","sourceUrl":"https://www.monetizemore.com/solutions/pubguru-premium/","checkedAt":"2026-10-22"}],"alsoNeeds":[],"sources":[{"label":"PubGuru: Premium requirements","url":"https://www.monetizemore.com/solutions/pubguru-premium/","checkedAt":"2026-10-22"},{"label":"PubGuru: MonetizeMore FAQ","url":"https://www.monetizemore.com/frequently-asked-questions/","checkedAt":"2026-10-22"},{"label":"PubGuru: Publisher case","url":"https://www.monetizemore.com/case-study/if-publab-can-5x-their-ad-revenue-using-pubguru-so-can-you/","checkedAt":"2026-10-22"},{"label":"PubGuru: Panlasang Pinoy case","url":"https://www.monetizemore.com/case-study/200-increase-from-adsense-only-setups-with-panlasangpinoy/","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://www.monetizemore.com/solutions/pubguru-premium/","https://www.monetizemore.com/frequently-asked-questions/"]}, + "monumetric": {"applyUrl":"https://www.monumetric.com/get-started/","bars":[{"metric":"pageviews","comparator":"at_least","amount":10000,"currency":null,"period":"month","scope":"Propel","program":null,"kind":"requirement","sourceUrl":"https://www.monumetric.com/monumetric-program-overview/","checkedAt":"2026-10-22"},{"metric":"tier1_share","comparator":"at_least","amount":50,"currency":null,"period":null,"scope":"US/UK/Australia/Canada","program":null,"kind":"requirement","sourceUrl":"https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/","checkedAt":"2026-10-22"}],"alsoNeeds":["english","propel_setup_fee_99_usd","propel_six_ad_slots","three_month_history","propel_wordpress_or_blogger"],"sources":[{"label":"Monumetric: Program overview","url":"https://www.monumetric.com/monumetric-program-overview/","checkedAt":"2026-10-22"},{"label":"Monumetric: Eligibility","url":"https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/","checkedAt":"2026-10-22"},{"label":"Monumetric: Propel requirements","url":"https://www.monumetric.com/requirements-for-the-propel-program/","checkedAt":"2026-10-22"},{"label":"Monumetric: Payment terms","url":"https://www.monumetric.com/payment-terms-and-how-you-are-paid/","checkedAt":"2026-10-22"},{"label":"Monumetric: Publisher's personal-finance monetization history","url":"https://perfectionhangover.com/5-financial-adjustments-to-make-if-youve-been-laid-off-from-work/","checkedAt":"2026-10-22"},{"label":"Monumetric: Frequently asked questions","url":"https://www.monumetric.com/frequently-asked-questions/","checkedAt":"2026-10-23"}],"joiningSourceUrls":["https://www.monumetric.com/monumetric-program-overview/","https://www.monumetric.com/what-are-the-requirements-to-work-with-monumetric/","https://www.monumetric.com/requirements-for-the-propel-program/","https://www.monumetric.com/frequently-asked-questions/"]}, + "newor-media": {"applyUrl":"https://newormedia.com/programs","bars":[{"metric":"us_pageviews","comparator":"at_least","amount":60000,"currency":null,"period":"month","scope":"US","program":"Catapult","kind":"requirement","sourceUrl":"https://newormedia.com/programs","checkedAt":"2026-10-22"},{"metric":"us_pageviews","comparator":"at_least","amount":420000,"currency":null,"period":"month","scope":"US","program":"Premier","kind":"requirement","sourceUrl":"https://newormedia.com/programs","checkedAt":"2026-10-22"},{"metric":"none","comparator":"none","amount":null,"currency":null,"period":null,"scope":"Elevate","program":"Elevate","kind":"requirement","sourceUrl":"https://newormedia.com/elevatefaqs","checkedAt":"2026-10-22"}],"alsoNeeds":["exclusive","own_gam"],"sources":[{"label":"Newor Media: Programs","url":"https://newormedia.com/programs","checkedAt":"2026-10-22"},{"label":"Newor Media: Elevate FAQ","url":"https://newormedia.com/elevatefaqs","checkedAt":"2026-10-23"},{"label":"Newor Media: 2025 onboarding blog","url":"https://newormedia.com/blog/ad-monetization-onboarding-with-newor-media/","checkedAt":"2026-10-22"},{"label":"Newor Media: Platform agreement","url":"https://newormedia.com/node/296","checkedAt":"2026-10-22"},{"label":"Newor Media: Payment terms FAQ","url":"https://newormedia.com/faqs/what-are-your-payment-terms","checkedAt":"2026-10-22"},{"label":"Newor Media: Newor rejections","url":"https://www.reddit.com/r/adops/comments/1vkm7no/skip_newor_media_by_any_means_possible/","checkedAt":"2026-10-22"},{"label":"Newor Media: Newor finance publisher report","url":"https://www.reddit.com/r/adops/comments/t8wisu","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://newormedia.com/programs","https://newormedia.com/elevatefaqs","https://newormedia.com/node/296"]}, + "nitropay": {"applyUrl":"https://nitropay.com/publishers/","bars":[],"alsoNeeds":[],"sources":[{"label":"NitroPay: Approval and onboarding","url":"https://nitropay.com/docs/","checkedAt":"2026-10-22"},{"label":"NitroPay: Publisher Guidelines","url":"https://blog.nitropay.com/guidelines/","checkedAt":"2026-10-22"},{"label":"NitroPay: Gaming site reports 600k views and $133","url":"https://www.reddit.com/r/adops/comments/1vep1yo/gaming-site-getting-133-ad-revenue-despite-600k/","checkedAt":"2026-10-22"},{"label":"NitroPay: Publisher application form","url":"https://nitropay.com/publishers/","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://nitropay.com/docs/","https://blog.nitropay.com/guidelines/","https://nitropay.com/publishers/"]}, + "opti-digital": {"applyUrl":"https://optidigital.com/request-demo/","bars":[],"alsoNeeds":["own_gam"],"sources":[{"label":"Opti Digital: Publisher monetization review","url":"https://optidigital.com/request-demo/","checkedAt":"2026-10-22"},{"label":"Opti Digital: Payment terms by setup","url":"https://knowledge-base.optidigital.com/knowledge/understanding-your-payment-terms","checkedAt":"2026-10-22"},{"label":"Opti Digital: publisher referral page","url":"https://optidigital.com/refer-a-publisher/","checkedAt":"2026-10-22"},{"label":"Opti Digital: 1XL case study","url":"https://optidigital.com/resources/case-studies/how-1xl-unlocked-incremental-premium-demand-with-opti-digital/","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://optidigital.com/request-demo/"]}, + "playwire": {"applyUrl":"https://www.playwire.com/apply","bars":[{"metric":"pageviews","comparator":"at_least","amount":500000,"currency":null,"period":"month","scope":"website","program":null,"kind":"requirement","sourceUrl":"https://www.playwire.com/faq","checkedAt":"2026-10-22"},{"metric":"pageviews","comparator":"at_least","amount":100000,"currency":null,"period":"month","scope":"website","program":null,"kind":"guidance","sourceUrl":"https://www.playwire.com/qualification-criteria","checkedAt":"2026-10-22"},{"metric":"us_share","comparator":"at_least","amount":20,"currency":null,"period":null,"scope":"publisher audience","program":null,"kind":"guidance","sourceUrl":"https://www.playwire.com/qualification-criteria","checkedAt":"2026-10-22"}],"alsoNeeds":["google_analytics","https","privacy_policy","replace_adsense_adexchange"],"sources":[{"label":"Playwire: Publisher FAQ","url":"https://www.playwire.com/faq","checkedAt":"2026-10-22"},{"label":"Playwire: Qualification criteria","url":"https://www.playwire.com/qualification-criteria","checkedAt":"2026-10-22"},{"label":"Playwire: Publisher terms of service","url":"https://www.playwire.com/terms-of-service","checkedAt":"2026-10-22"},{"label":"Playwire: Gaming publisher approaches and mixed results","url":"https://www.reddit.com/r/adops/comments/1wp5uz8/","checkedAt":"2026-10-22"},{"label":"Playwire: Apply Now page","url":"https://www.playwire.com/apply","checkedAt":"2026-10-22"},{"label":"Playwire: publisher considering other gaming networks","url":"https://www.reddit.com/r/adops/comments/1sza527/venatus_vs_publisher_collective/","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://www.playwire.com/faq","https://www.playwire.com/qualification-criteria","https://www.playwire.com/apply"]}, + "pubfuture": {"applyUrl":"https://ssp.pubfuture.com/auth/signup","bars":[{"metric":"pageviews","comparator":"at_least","amount":100000,"currency":null,"period":"month","scope":"website","program":null,"kind":"requirement","sourceUrl":"https://pubfuture.com/home","checkedAt":"2026-10-23"}],"alsoNeeds":[],"sources":[{"label":"PubFuture: Publisher FAQ","url":"https://pubfuture.com/home","checkedAt":"2026-10-23"},{"label":"PubFuture: H5 game vendor case study","url":"https://blog.pubfuture.com/the-secret-to-400-more-revenue-for-h5-game-sites-pubfutures-winning-formula/1007/","checkedAt":"2026-10-16"},{"label":"PubFuture: Publisher contact form","url":"https://pubfuture.com/contact","checkedAt":"2026-10-16"},{"label":"PubFuture: Publisher sign-up form","url":"https://ssp.pubfuture.com/auth/signup","checkedAt":"2026-10-23"}],"joiningSourceUrls":["https://pubfuture.com/home","https://ssp.pubfuture.com/auth/signup"]}, + "pubgalaxy": {"applyUrl":"","bars":[],"alsoNeeds":[],"sources":[{"label":"PubGalaxy: Azerion announcement unifying publisher supply under Improve","url":"https://www.azerion.com/azerion-unifies-its-publisher-supply-business-under-improve-digital-launching-a-full-circle-solution-for-publishers/","checkedAt":"2026-10-22"},{"label":"PubGalaxy: Current Improve Digital publisher offering","url":"https://improvedigital.com/","checkedAt":"2026-10-22"},{"label":"PubGalaxy: Legacy publisher URL","url":"https://www.pubgalaxy.com/publishers/","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://www.azerion.com/azerion-unifies-its-publisher-supply-business-under-improve-digital-launching-a-full-circle-solution-for-publishers/","https://improvedigital.com/","https://www.pubgalaxy.com/publishers/"]}, + "publift": {"applyUrl":"https://www.publift.com/lets-talk","bars":[{"metric":"ad_revenue_month","comparator":"more_than","amount":2000,"currency":"USD","period":"month","scope":"publisher site","program":null,"kind":"requirement","sourceUrl":"https://www.publift.com/blog/publift-requirements","checkedAt":"2026-10-22"},{"metric":"pageviews","comparator":"at_least","amount":500000,"currency":null,"period":"month","scope":"publisher site","program":null,"kind":"guidance","sourceUrl":"https://www.publift.com/blog/publift-requirements","checkedAt":"2026-10-22"}],"alsoNeeds":[],"sources":[{"label":"Publift: requirements","url":"https://www.publift.com/blog/publift-requirements","checkedAt":"2026-10-22"},{"label":"Publift: How it works and publisher fit","url":"https://www.publift.com/how-it-works","checkedAt":"2026-10-22"},{"label":"Publift: Publisher inquiry and forecast","url":"https://www.reddit.com/r/adops/comments/1wp5uz8/","checkedAt":"2026-10-22"},{"label":"Publift: Publisher reviews","url":"https://www.reddit.com/r/adops/comments/1w7fix0/","checkedAt":"2026-10-22"},{"label":"Publift: Publisher enquiry form","url":"https://www.publift.com/lets-talk","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://www.publift.com/blog/publift-requirements","https://www.publift.com/how-it-works"]}, + "publir": {"applyUrl":"https://publir.com/app/pricing","bars":[],"alsoNeeds":[],"sources":[{"label":"Publir: Pricing","url":"https://publir.com/app/pricing","checkedAt":"2026-10-22"},{"label":"Publir: Service agreement","url":"https://publir.com/service_agreement","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://publir.com/app/pricing","https://publir.com/service_agreement"]}, + "publisher-collective": {"applyUrl":"https://www.publisher-collective.com/publisher-contact","bars":[{"metric":"pageviews","comparator":"at_least","amount":3000000,"currency":null,"period":"month","scope":"outside core genres","program":null,"kind":"requirement","sourceUrl":"https://www.publisher-collective.com/faq","checkedAt":"2026-10-22"},{"metric":"ad_revenue_month","comparator":"at_least","amount":300,"currency":"EUR","period":"day","scope":"publisher site","program":null,"kind":"guidance","sourceUrl":"https://www.publisher-collective.com/faq","checkedAt":"2026-10-22"}],"alsoNeeds":[],"sources":[{"label":"Publisher Collective: Publisher FAQ and current eligibility","url":"https://www.publisher-collective.com/faq","checkedAt":"2026-10-22"},{"label":"Publisher Collective: Partner terms","url":"https://www.publisher-collective.com/partners-terms-conditions","checkedAt":"2026-10-22"},{"label":"Publisher Collective: Gaming publisher discussion","url":"https://www.reddit.com/r/adops/comments/1mpgmnn/","checkedAt":"2026-10-22"},{"label":"Publisher Collective: Customer reviews","url":"https://www.trustpilot.com/review/www.publisher-collective.com","checkedAt":"2026-10-22"},{"label":"Publisher Collective: Publisher contact form","url":"https://www.publisher-collective.com/publisher-contact","checkedAt":"2026-10-22"},{"label":"Publisher Collective: Gaming publisher comparing Publisher Collective and Venatus","url":"https://www.reddit.com/r/adops/comments/1sza527/venatus_vs_publisher_collective/","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://www.publisher-collective.com/faq","https://www.publisher-collective.com/partners-terms-conditions"]}, + "pubnation": {"applyUrl":"","bars":[],"alsoNeeds":[],"sources":[{"label":"PubNation: Mediavine migration status","url":"https://help.mediavine.com/","checkedAt":"2026-10-22"},{"label":"PubNation: Official publisher homepage","url":"https://www.pubnation.com/","checkedAt":"2026-10-22"},{"label":"PubNation: historical acceptance report","url":"https://www.reddit.com/r/Blogging/comments/1s0ly5b/","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://help.mediavine.com/","https://www.pubnation.com/"]}, + "pubpower": {"applyUrl":"https://apps.pubpower.io/register","bars":[{"metric":"visitors","comparator":"at_least","amount":100000,"currency":null,"period":"month","scope":"publisher site","program":null,"kind":"guidance","sourceUrl":"https://help.pubpower.io/article/website-requirements","checkedAt":"2026-10-22"}],"alsoNeeds":[],"sources":[{"label":"PubPower: Website requirements","url":"https://help.pubpower.io/article/website-requirements","checkedAt":"2026-10-22"},{"label":"PubPower: Payment methods and terms","url":"https://help.pubpower.io/article/payment-methods-terms","checkedAt":"2026-10-22"},{"label":"PubPower: Quick-start and domain review","url":"https://help.pubpower.io/article/quick-start-to-your-monetization","checkedAt":"2026-10-22"},{"label":"PubPower: Anime publisher question","url":"https://www.reddit.com/r/adops/comments/1dpv6e3/","checkedAt":"2026-10-22"},{"label":"PubPower: Publisher account registration","url":"https://apps.pubpower.io/register","checkedAt":"2026-10-23"},{"label":"PubPower: publisher packages and revenue-sharing model","url":"https://pubpower.io/","checkedAt":"2026-10-23"}],"joiningSourceUrls":["https://help.pubpower.io/article/website-requirements","https://help.pubpower.io/article/quick-start-to-your-monetization","https://apps.pubpower.io/register"]}, + "raptive": {"applyUrl":"https://dashboard.raptive.com/","bars":[{"metric":"pageviews","comparator":"at_least","amount":25000,"currency":null,"period":"month","scope":"publisher site","program":null,"kind":"requirement","sourceUrl":"https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive","checkedAt":"2026-10-22"},{"metric":"tier1_share","comparator":"at_least","amount":50,"currency":null,"period":null,"scope":"under 100,000 pageviews a month","program":null,"kind":"requirement","sourceUrl":"https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive","checkedAt":"2026-10-22"},{"metric":"tier1_share","comparator":"at_least","amount":40,"currency":null,"period":null,"scope":"from 100,000 pageviews a month","program":null,"kind":"requirement","sourceUrl":"https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive","checkedAt":"2026-10-22"}],"alsoNeeds":["domain_age_6_months"],"sources":[{"label":"Raptive: Who is eligible","url":"https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive","checkedAt":"2026-10-22"},{"label":"Raptive: Payment timing","url":"https://help.raptive.com/hc/en-us/articles/202052255-When-do-I-get-paid","checkedAt":"2026-10-22"},{"label":"Raptive: acceptance anecdote","url":"https://www.reddit.com/r/Blogging/comments/1x8brun/","checkedAt":"2026-10-22"},{"label":"Raptive: Getting started and share","url":"https://help.raptive.com/hc/en-us/articles/360035078152-Getting-Started-with-Raptive","checkedAt":"2026-10-23"},{"label":"Raptive: Publisher application","url":"https://dashboard.raptive.com/","checkedAt":"2026-10-23"}],"joiningSourceUrls":["https://help.raptive.com/hc/en-us/articles/360032840891-Who-is-eligible-for-Raptive"]}, + "refinery89": {"applyUrl":"https://refinery89.com/get-started/","bars":[],"alsoNeeds":[],"sources":[{"label":"Refinery89: Eligibility","url":"https://refinery89.com/docs/faqs/requirements/am-i-eligible/","checkedAt":"2026-10-22"},{"label":"Refinery89: Publisher service locations","url":"https://refinery89.com/docs/faqs/about-refinery89/where-does-refinery89-operate-and-offer-its-services/","checkedAt":"2026-10-22"},{"label":"Refinery89: Payment threshold","url":"https://refinery89.com/docs/faqs/finance/is-there-a-minimum-threshold-for-getting-paid/","checkedAt":"2026-10-22"},{"label":"Refinery89: Publisher reviews","url":"https://www.trustpilot.com/review/refinery89.com","checkedAt":"2026-10-22"},{"label":"Refinery89: Publisher and app Get Started form","url":"https://refinery89.com/get-started/","checkedAt":"2026-10-23"}],"joiningSourceUrls":["https://refinery89.com/docs/faqs/requirements/am-i-eligible/","https://refinery89.com/docs/faqs/about-refinery89/where-does-refinery89-operate-and-offer-its-services/","https://refinery89.com/get-started/"]}, + "revcontent": {"applyUrl":"https://www.revcontent.com/resources/revcontent-publisher-application","bars":[{"metric":"none","comparator":"none","amount":null,"currency":null,"period":null,"scope":"publisher account and every domain","program":null,"kind":"requirement","sourceUrl":"https://help.revcontent.com/knowledge/creating-a-revcontent-publisher-account","checkedAt":"2026-10-22"}],"alsoNeeds":[],"sources":[{"label":"Revcontent: Publisher account creation and approval","url":"https://help.revcontent.com/knowledge/creating-a-revcontent-publisher-account","checkedAt":"2026-10-22"},{"label":"Revcontent: Publisher application","url":"https://www.revcontent.com/resources/revcontent-publisher-application","checkedAt":"2026-10-22"},{"label":"Revcontent: Publisher payment requirements and methods","url":"https://help.revcontent.com/knowledge/publisher-payment-requirements-methods","checkedAt":"2026-10-22"},{"label":"Revcontent: Publisher payment dispute","url":"https://www.reddit.com/r/adops/comments/bx97d2/","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://help.revcontent.com/knowledge/creating-a-revcontent-publisher-account","https://www.revcontent.com/resources/revcontent-publisher-application"]}, + "setupad": {"applyUrl":"https://signup.setupad.com/?lang=en&type=7","bars":[{"metric":"visits","comparator":"at_least","amount":10000000,"currency":null,"period":"month","scope":"Self-Serve Free plan entry","program":"Self-Serve","kind":"requirement","sourceUrl":"https://setupad.com/setupad-self-serve/","checkedAt":"2026-10-22"},{"metric":"visits","comparator":"at_least","amount":50000000,"currency":null,"period":"month","scope":"Self-Serve Enterprise plan level","program":"Self-Serve","kind":"guidance","sourceUrl":"https://setupad.com/setupad-self-serve/","checkedAt":"2026-10-22"}],"alsoNeeds":[],"sources":[{"label":"Setupad: Self-Serve plans","url":"https://setupad.com/setupad-self-serve/","checkedAt":"2026-10-22"},{"label":"Setupad: Self-Serve application","url":"https://signup.setupad.com/?lang=en&type=7","checkedAt":"2026-10-22"},{"label":"Setupad: publisher requirements and payment guidance","url":"https://setupad.com/blog/best-ad-networks-for-publishers/","checkedAt":"2026-10-16"},{"label":"Setupad: One-year publisher review","url":"https://medium.com/@vibrant_mango_impala_136/setupad-review-my-1-year-with-setupad-and-why-i-ultimately-switched-back-to-google-adsense-150fd77506d5","checkedAt":"2026-10-22"},{"label":"Setupad: Self-Serve application","url":"https://signup.setupad.com/?lang=en&type=7","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://setupad.com/setupad-self-serve/","https://signup.setupad.com/?lang=en&type=7","https://setupad.com/blog/best-ad-networks-for-publishers/"]}, + "she-media": {"applyUrl":"https://apply.shemedia.com/","bars":[{"metric":"pageviews","comparator":"at_least","amount":50000,"currency":null,"period":"month","scope":"publisher website","program":null,"kind":"requirement","sourceUrl":"https://www.shemedia.com/partner-network/faqs","checkedAt":"2026-10-22"},{"metric":"us_share","comparator":"at_least","amount":30,"currency":null,"period":null,"scope":"publisher audience","program":null,"kind":"requirement","sourceUrl":"https://www.shemedia.com/partner-network/faqs","checkedAt":"2026-10-22"}],"alsoNeeds":["ga_access","not_wix","site_live_90_days"],"sources":[{"label":"SHE Media: Partner FAQ","url":"https://www.shemedia.com/partner-network/faqs","checkedAt":"2026-10-22"},{"label":"SHE Media: Member Guide, updated March 2023","url":"https://www.shemedia.com/member-spotlight/member-guide-for-partners","checkedAt":"2026-10-22"},{"label":"SHE Media: International payment options, updated April 2025","url":"https://support.shemedia.com/hc/en-us/articles/35987097977627-Payment-Options-for-Publishers-Outside-the-US","checkedAt":"2026-10-22"},{"label":"SHE Media: publisher review","url":"https://imperfectidealist.com/she-media-review/","checkedAt":"2026-10-22"},{"label":"SHE Media: Publisher application","url":"https://apply.shemedia.com/","checkedAt":"2026-10-23"}],"joiningSourceUrls":["https://www.shemedia.com/partner-network/faqs","https://apply.shemedia.com/"]}, + "snack-media": {"applyUrl":"https://www.snack-media.com/publishers/","bars":[],"alsoNeeds":[],"sources":[{"label":"Snack Media: Snack publisher services","url":"https://www.snack-media.com/publishers/","checkedAt":"2026-10-22"},{"label":"Snack Media: 2025 publisher agreement terms","url":"https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf","checkedAt":"2026-10-22"},{"label":"Snack Media: Publisher referral eligibility","url":"https://www.snack-media.com/referral/","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://www.snack-media.com/publishers/","https://cdn.snack-media.com/wp-content/uploads/2025/08/Snack-Ad-Network-Agreement-TCs.pdf"]}, + "sovrn": {"applyUrl":"https://platform.sovrn.com/account/signup","bars":[{"metric":"visits","comparator":"more_than","amount":100000,"currency":null,"period":"month","scope":"publisher property","program":null,"kind":"requirement","sourceUrl":"https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property","checkedAt":"2026-10-22"}],"alsoNeeds":["audience_age","content_policies","exclusive","recent_content"],"sources":[{"label":"Sovrn: Property approval requirements","url":"https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property","checkedAt":"2026-10-22"},{"label":"Sovrn: Approval process and timing","url":"https://knowledge.sovrn.com/kb/what-is-sovrn-s-approval-process-for-the-ad-exchange","checkedAt":"2026-10-16"},{"label":"Sovrn: Current payment methods","url":"https://knowledge.sovrn.com/kb/how-do-i-get-paid-for-the-ad-exchange","checkedAt":"2026-10-16"},{"label":"Sovrn: Ad Exchange account sign-up","url":"https://platform.sovrn.com/account/signup","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://knowledge.sovrn.com/kb/what-is-required-for-sovrn-to-approve-my-property","https://knowledge.sovrn.com/kb/what-is-sovrn-s-approval-process-for-the-ad-exchange","https://platform.sovrn.com/account/signup"]}, + "sparteo": {"applyUrl":"https://corporate.sparteo.com/contact","bars":[],"alsoNeeds":[],"sources":[{"label":"Sparteo: Company and publisher services","url":"https://corporate.sparteo.com/","checkedAt":"2026-10-22"},{"label":"Sparteo: Publisher platform case study","url":"https://corporate.sparteo.com/post/w3schools-rpm-uplift-unified-monetisation-stack","checkedAt":"2026-10-22"},{"label":"Sparteo: Gaming partner report","url":"https://www.reddit.com/r/adops/comments/1sjz5b7/3_million_monthly_page_views_and_23k_monthly_ad/","checkedAt":"2026-10-22"},{"label":"Sparteo: Publisher contact form","url":"https://corporate.sparteo.com/contact","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://corporate.sparteo.com/","https://corporate.sparteo.com/contact"]}, + "taboola": {"applyUrl":"https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account","bars":[{"metric":"none","comparator":"none","amount":null,"currency":null,"period":null,"scope":"publisher website","program":null,"kind":"guidance","sourceUrl":"https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account","checkedAt":"2026-10-22"}],"alsoNeeds":["exclusive","exclusive_native_widget"],"sources":[{"label":"Taboola: New publisher account guide","url":"https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account","checkedAt":"2026-10-22"},{"label":"Taboola: Publisher policy","url":"https://pubhelp.taboola.com/hc/en-us/articles/360033751274-Taboola-Publisher-Policy","checkedAt":"2026-10-22"},{"label":"Taboola: The Independent case","url":"https://www.taboola.com/resources/case-studies/the-independent-uk","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://pubhelp.taboola.com/hc/en-us/articles/39280014062487-How-To-Get-New-Account","https://pubhelp.taboola.com/hc/en-us/articles/360033751274-Taboola-Publisher-Policy"]}, + "teads": {"applyUrl":"https://www.teads.com/teads-contact/","bars":[],"alsoNeeds":[],"sources":[{"label":"Teads: Media owner partnership","url":"https://www.teads.com/media-owners","checkedAt":"2026-10-22"},{"label":"Teads: Contact","url":"https://www.teads.com/teads-contact/","checkedAt":"2026-10-22"},{"label":"Teads: Publisher agreement filing","url":"https://investors.teads.com/static-files/4f470000-7ee3-4919-9e4d-506e65a44af4","checkedAt":"2026-10-16"},{"label":"Teads: Italian publisher discussion","url":"https://www.reddit.com/r/adops/comments/1rr1frr/","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://www.teads.com/media-owners","https://www.teads.com/teads-contact/"]}, + "the-moneytizer": {"applyUrl":"https://us.themoneytizer.com/","bars":[{"metric":"organic_unique_visitors_30d","comparator":"at_least","amount":300000,"currency":null,"period":"30_days","scope":"traffic from US/UK/CA","program":null,"kind":"requirement","sourceUrl":"https://us.themoneytizer.com/faq/validation-criteria","checkedAt":"2026-10-22"}],"alsoNeeds":["content_policies","not_jimdo","not_wix","own_domain","server_access"],"sources":[{"label":"The Moneytizer: US validation criteria","url":"https://us.themoneytizer.com/faq/validation-criteria","checkedAt":"2026-10-22"},{"label":"The Moneytizer: Publisher guide","url":"https://us.themoneytizer.com/publisherguide","checkedAt":"2026-10-22"},{"label":"The Moneytizer: Publisher terms and conditions","url":"https://www.themoneytizer.com/cgu","checkedAt":"2026-10-22"},{"label":"The Moneytizer: US payments FAQ","url":"https://us.themoneytizer.com/category/payments-invoices","checkedAt":"2026-10-22"},{"label":"The Moneytizer: US publisher sign-up page","url":"https://us.themoneytizer.com/","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://us.themoneytizer.com/faq/validation-criteria","https://us.themoneytizer.com/publisherguide","https://www.themoneytizer.com/cgu"]}, + "venatus": {"applyUrl":"https://www.venatus.com/contact/for-publishers","bars":[],"alsoNeeds":["content_policies"],"sources":[{"label":"Venatus: Publisher contact page","url":"https://www.venatus.com/contact/for-publishers","checkedAt":"2026-10-22"},{"label":"Venatus: Publisher brand-safety standards","url":"https://www.venatus.com/brand-safety","checkedAt":"2026-10-22"},{"label":"Venatus: Publisher comparison","url":"https://www.reddit.com/r/adops/comments/1sza527/venatus_vs_publisher_collective/","checkedAt":"2026-10-22"},{"label":"Venatus: Publisher review","url":"https://www.trustpilot.com/review/www.venatus.com","checkedAt":"2026-10-22"}],"joiningSourceUrls":["https://www.venatus.com/contact/for-publishers","https://www.venatus.com/brand-safety"]}, +}; diff --git a/lib/ad-network-requirements/profiles.ts b/lib/ad-network-requirements/profiles.ts new file mode 100644 index 00000000..19b3d0c1 --- /dev/null +++ b/lib/ad-network-requirements/profiles.ts @@ -0,0 +1,68 @@ +import { profileFacts } from "./profile-facts.ts"; +import type { AdNetworkProfile, NicheSlug, ProgramProfile, ScaleRoute } from "./types.ts"; + +// Editorial priors from recommendation-model.md. These rank estimated fit; +// only the separately sourced bars describe a network's own published criteria. +const lifestyle: NicheSlug[] = ["food", "travel", "lifestyle", "parenting", "personal-finance", "home-diy", "crafts", "health-fitness", "beauty-fashion", "gardening", "pets", "outdoors", "education"]; +const core: NicheSlug[] = ["tech", "gaming", "crafts", "education", "sports", "health-fitness"]; +const route = (metric: ScaleRoute["metric"], floor: number, comfortable: number, kind: ScaleRoute["kind"]): ScaleRoute => ({ metric, floor, comfortable, kind, official: ["hard", "soft", "none", "pref"].includes(kind) }); +const pv = (f: number, c: number, kind: ScaleRoute["kind"] = "editorial") => route("pageviews", f, c, kind); +const revenue = (f: number, c: number, kind: ScaleRoute["kind"] = "editorial") => route("adRevenueMonth", f, c, kind); +function profile(slug: string, lane: AdNetworkProfile["lane"], tier: number, access: AdNetworkProfile["access"], evidence: AdNetworkProfile["evidence"], routes: ScaleRoute[], extra: Partial = {}): AdNetworkProfile { + const facts = profileFacts[slug]; + return { slug, lane, tier, access, evidence, strong: [], weak: [], geography: "none", programs: [{ name: null, tier, routes }], ...facts, ...extra }; +} +const neworPrograms: ProgramProfile[] = [ + { name: "Elevate", tier: 1, routes: [pv(10_000, 40_000)], alsoNeeds: ["english"] }, + { name: "Catapult", tier: 2, routes: [route("usPageviews", 60_000, 420_000, "hard")] }, + { name: "Premier", tier: 3, routes: [route("usPageviews", 420_000, 420_000, "hard")] }, +]; +export const adNetworkProfiles: AdNetworkProfile[] = [ + profile("google-adsense", "main", 0, "open", "high", [pv(0, 0, "none")]), + profile("journey-by-mediavine", "main", 1, "form", "medium", [route("tier1Sessions30d", 1000, 5000, "hard")], { strong: lifestyle, weak: ["news"], geography: "tier1", ageMonths: 4, family: "mediavine" }), + profile("monumetric", "main", 1, "form", "high", [pv(10_000, 20_000, "hard")], { strong: ["personal-finance", "food", "travel", "lifestyle", "home-diy", "parenting", "crafts", "health-fitness"], ageMonths: 3 }), + profile("newor-media", "main", 1, "form", "medium", [], { programs: neworPrograms }), + profile("buysellads-carbon-ads", "main", 1, "form", "medium", [pv(20_000, 100_000)], { accessScore: 0.9, strong: ["tech"], nicheGate: ["tech"], geography: "tier1" }), + profile("pubfuture", "main", 1, "open", "medium", [pv(100_000, 200_000, "hard")], { strong: ["gaming"], weak: ["food", "home-diy", "travel", "parenting", "personal-finance", "health-fitness", "beauty-fashion", "tech", "crafts", "pets", "outdoors", "gardening", "sports", "lifestyle", "automotive", "business", "news"] }), + profile("pubpower", "main", 1, "form", "low", [route("visitors", 100_000, 200_000, "soft")], { strong: ["entertainment", "gaming"] }), + profile("raptive", "main", 2, "form", "high", [pv(25_000, 50_000, "hard")], { strong: ["food", "lifestyle", "home-diy", "parenting", "travel", "crafts", "personal-finance", "health-fitness", "beauty-fashion", "gardening", "pets"], ageMonths: 6 }), + profile("mediavine", "main", 2, "form", "high", [revenue(420, 700, "editorial_gate")], { strong: lifestyle, weak: ["news"], geography: "tier1", family: "mediavine" }), + profile("she-media", "main", 2, "form", "high", [pv(50_000, 100_000, "hard")], { strong: ["lifestyle", "food", "parenting", "home-diy", "beauty-fashion", "health-fitness", "crafts", "travel"], weak: ["gaming", "tech", "automotive", "sports", "news", "business"], ageMonths: 3 }), + profile("ezoic", "main", 2, "open", "high", [route("monthlyActiveUsers", 250_000, 400_000, "hard")], { strong: ["tech", "news", "education"] }), + profile("clickio", "main", 2, "contact", "high", [pv(100_000, 200_000, "soft"), revenue(500.01, 1000, "hard")]), + profile("the-moneytizer", "main", 2, "form", "high", [route("moneytizerUniques30d", 300_000, 450_000, "hard")]), + profile("nitropay", "main", 2, "form", "medium", [pv(25_000, 100_000)], { strong: ["gaming", "entertainment"], specialist: true }), + profile("refinery89", "main", 2, "contact", "low", [pv(100_000, 500_000)], { strong: ["news", "lifestyle"], geography: "region" }), + profile("playwire", "main", 3, "form", "medium", [pv(100_000, 500_000, "soft")], { strong: ["gaming", "education", "entertainment", "travel"], geography: "tier1" }), + profile("freestar", "main", 3, "contact", "medium", [pv(300_000, 1_000_000)], { strong: ["sports", "news", "personal-finance", "automotive", "gaming", "entertainment"] }), + profile("publift", "main", 3, "contact", "high", [revenue(2000.01, 4000, "hard"), pv(500_000, 1_000_000, "soft")], { strong: ["gaming"], geography: "tier1" }), + profile("publisher-collective", "main", 3, "contact", "high", [pv(300_000, 1_000_000), revenue(9000, 15_000)], { strong: core }), + profile("snack-media", "main", 3, "contact", "medium", [pv(250_000, 1_000_000)], { strong: ["sports", "entertainment"], specialist: true }), + profile("venatus", "main", 3, "contact", "low", [pv(250_000, 1_000_000)], { strong: ["gaming", "sports", "entertainment"], specialist: true }), + profile("adnimation", "main", 3, "form", "low", [pv(1_000_000, 3_000_000)], { strong: ["news", "automotive"], programs: [{ name: "Standard", tier: 3, routes: [pv(1_000_000, 3_000_000)] }] }), + profile("concert", "main", 4, "invite", "low", [pv(10_000_000, 30_000_000)], { strong: ["news", "entertainment"] }), + profile("media-net", "main", 0, "form", "low", [pv(50_000, 250_000)], { strong: ["news", "personal-finance", "tech"], geography: "tier1" }), + profile("infolinks", "add", 0, "open", "medium", [pv(0, 0, "none")]), + profile("revcontent", "add", 0, "form", "medium", [pv(0, 0, "none")], { strong: ["news", "entertainment"] }), + profile("taboola", "add", 0, "form", "medium", [pv(0, 100_000, "pref")], { strong: ["news", "entertainment", "lifestyle"] }), + profile("mgid", "add", 0, "open", "high", [route("visitors", 90_000, 180_000, "hard")], { strong: ["news", "entertainment", "sports"] }), + profile("sovrn", "add", 0, "form", "high", [route("visits", 100_001, 200_000, "hard")]), + profile("ethicalads", "add", 0, "form", "medium", [pv(50_000, 100_000, "hard")], { strong: ["tech"], nicheGate: ["tech", "education"], geography: "tier1" }), + profile("teads", "add", 4, "contact", "low", [pv(1_000_000, 5_000_000)], { strong: ["news", "education", "entertainment"] }), + profile("amazon-publisher-services", "setup", 4, "invite", "medium", [pv(1_000_000, 5_000_000)], { strong: ["news"] }), + profile("monetizemore-pubguru", "setup", 3, "contact", "high", [revenue(5000, 10_000, "hard"), pv(2_000_000, 4_000_000, "hard")], { strong: ["food"] }), + profile("adpushup", "setup", 3, "form", "low", [revenue(3000, 6000), pv(500_000, 1_000_000)], { strong: ["tech"] }), + profile("adapex", "setup", 3, "contact", "low", [pv(500_000, 2_000_000), revenue(3000, 10_000)]), + profile("aditude", "setup", 4, "contact", "low", [pv(1_000_000, 5_000_000), revenue(10_000, 30_000)], { strong: ["gaming", "entertainment"] }), + profile("anymind-anymanager", "setup", 4, "contact", "low", [pv(1_000_000, 3_000_000), revenue(5000, 15_000)], { strong: ["news", "gaming"], geography: "region" }), + profile("geniee-ssp", "setup", 4, "form", "low", [pv(1_000_000, 3_000_000)], { strong: ["news"], geography: "region" }), + profile("opti-digital", "setup", 4, "contact", "low", [pv(1_000_000, 3_000_000), revenue(5000, 15_000)], { geography: "region" }), + profile("publir", "setup", 3, "form", "low", [pv(100_000, 500_000)]), + profile("setupad", "setup", 3, "form", "low", [], { programs: [ + { name: "Managed", tier: 3, routes: [route("visits", 100_000, 500_000, "editorial")] }, + { name: "Self-Serve", tier: 3, evidence: "high", routes: [route("visits", 10_000_000, 50_000_000, "hard")], alsoNeeds: ["own_gam"] }, + ] }), + profile("sparteo", "setup", 4, "contact", "low", [pv(1_000_000, 3_000_000)], { strong: ["education"] }), + profile("pubnation", "legacy", 2, "contact", "low", []), + profile("pubgalaxy", "legacy", 2, "contact", "low", []), +]; diff --git a/lib/ad-network-requirements/types.ts b/lib/ad-network-requirements/types.ts new file mode 100644 index 00000000..41d36f16 --- /dev/null +++ b/lib/ad-network-requirements/types.ts @@ -0,0 +1,64 @@ +import type { AdNetworkNicheSlug } from "../ad-network-niches.ts"; +import type { NetworkLogoFile } from "../../app/ui/ad-networks/network-logo-src.ts"; + +export type NicheSlug = AdNetworkNicheSlug; +export type CountryCode = "US" | "GB" | "CA" | "AU" | "NZ"; +export type VisitsUnit = "sessions" | "visits" | "users"; +export type SiteAge = "lt3m" | "3to6m" | "6to12m" | "gt12m"; +export type InputKey = "niche" | "pageviews" | "visits" | "visitsUnit" | "siteAge" | "tier1Share" | "shareUS" | "shareGB" | "shareCA" | "shareAU" | "shareNZ" | "current" | "adRevenueMonth"; +export type RecommendationInput = { + niche: NicheSlug | "other"; pageviews?: number; visits?: number; visitsUnit: VisitsUnit; + siteAge?: SiteAge; tier1Share?: number; shares?: Partial>; + current?: string; adRevenueMonth?: number; +}; +export type InputErrorCode = "required" | "not_a_number" | "negative" | "not_whole" | "too_many_decimals" | "too_large" | "over_100" | "shares_over_100" | "shares_over_tier1" | "split_mismatch" | "invalid_choice"; +export type Interval = { lo: number; hi: number; exact: boolean }; +export type MeasureKey = "pageviews" | "sessions" | "visits" | "visitors" | "monthlyActiveUsers" | "tier1Sessions30d" | "tier1Share" | "usShare" | "monumetricShare" | "moneytizerShare" | "usPageviews" | "adRevenueMonth" | "moneytizerUniques30d"; +export type Measures = Partial> & { noCountryInput: boolean }; +export type Lane = "main" | "add" | "setup"; +export type Status = "good_fit" | "worth_a_try" | "growth_target"; +export type Basis = "published_number" | "estimate" | "no_minimum" | "review_led"; +export type ReasonCode = "published_bar" | "estimated_bar" | "apply_guidance" | "revenue_signal" | "revenue_bar" | "no_minimum" | "case_by_case" | "niche_specialist" | "sales_led" | "upgrade" | "check_contract" | "fit_estimate"; +export type BarFact = { + metric: "pageviews" | "tier1_sessions_30d" | "visits" | "visitors" | "monthly_active_users" | "us_pageviews" | "ad_revenue_month" | "ad_revenue_previous_calendar_year" | "tier1_share" | "us_share" | "organic_unique_visitors_30d" | "none"; + comparator: "at_least" | "more_than" | "none"; amount: number | null; currency: "USD" | "EUR" | null; + period: "month" | "day" | "30_days" | "previous_calendar_year" | null; + scope: string | null; program: string | null; kind: "requirement" | "guidance"; sourceUrl: string; checkedAt: string; +}; +export type RouteKind = "hard" | "soft" | "editorial" | "editorial_gate" | "none" | "pref"; +export type ScaleRoute = { + metric: MeasureKey; floor: number; comfortable: number; kind: RouteKind; + official: boolean; bar?: BarFact; +}; +export type ProfileRequirement = { metric: MeasureKey; threshold: number; bar: BarFact }; +export type ProgramProfile = { + name: string | null; tier: number; routes: ScaleRoute[]; + evidence?: "high" | "medium" | "low"; alsoNeeds?: string[]; +}; +export type RecommendationSource = { label: string; url: string; checkedAt: string }; +export type AdNetworkProfile = { + slug: string; lane: Lane | "legacy"; tier: number; access: "open" | "form" | "contact" | "invite"; + accessScore?: number; evidence: "high" | "medium" | "low"; + strong: NicheSlug[]; weak: NicheSlug[]; geography: "none" | "tier1" | "region"; + ageMonths?: number; family?: string; nicheGate?: NicheSlug[]; specialist?: boolean; + programs: ProgramProfile[]; bars: BarFact[]; alsoNeeds: string[]; applyUrl: string; + sources: RecommendationSource[]; + joiningSourceUrls: string[]; // Official joining pages; research evidence stays in sources. +}; +export type Recommendation = { + slug: string; program: string | null; lane: Lane; status: Exclude; + reason: { code: ReasonCode; values: Record }; + upgrade: boolean; checkContract: boolean; applyUrl: string; + detail: { bars: BarFact[]; alsoNeeds: string[]; sources: RecommendationSource[]; peers: number | null; directoryHref: string }; + debug: { score: number; rank: number; basis: Basis; S: number; TM: number; G: number; Cc: number; + P: number | null; Aeff: number; Aage: number; Nmult: number; estimated: (keyof Measures)[] }; +}; +export type GrowthTarget = { slug: string; program: string | null; bar: BarFact }; +export type Lead = { kind: "apply"; slug: string; count: number } | { kind: "grow"; slug: string } | { kind: "no_step_up"; current: string } | { kind: "none_stand_out" }; +export type RecommendationResult = { + lead: Lead; main: Recommendation[]; more: { add: Recommendation[]; setup: Recommendation[]; growth: GrowthTarget[] }; suggestInput: InputKey | null; +}; +export type RequirementsPageData = { + networks: { slug: string; name: string; logo: NetworkLogoFile | null; directoryHref: string }[]; + peers: Record>>; defaultResult: RecommendationResult; +}; diff --git a/lib/ad-networks-report.ts b/lib/ad-networks-report.ts index 3b6f7e86..8513a835 100644 --- a/lib/ad-networks-report.ts +++ b/lib/ad-networks-report.ts @@ -6,12 +6,11 @@ import { adNetworkNiches } from "./ad-network-niches.ts"; export const AD_NETWORK_SITES_PAGE_SIZE = 10; export const AD_NETWORK_NICHE_MIN_SITES = 100; -export const AD_NETWORK_NICHE_MIN_SHARE = 0.8; -/** A broad niche comparison needs both a useful sample and broad coverage. */ +/** A niche comparison needs a useful sample. Sites still waiting for the weekly sort don't hide published niche pages. */ export function hasAdNetworkNicheCoverage(listed: number, classified: number) { - // data-gate: the niche classification run fills at least 100 sites and 80% of the scope. - return listed > 0 && classified >= AD_NETWORK_NICHE_MIN_SITES && classified / listed >= AD_NETWORK_NICHE_MIN_SHARE; + // data-gate: the niche classification run has sorted at least 100 sites. + return listed > 0 && classified >= AD_NETWORK_NICHE_MIN_SITES; } /** A network's own breakdown describes only its sorted sites, even a sample of one. */ @@ -31,7 +30,7 @@ export function adNetworkSiteAvailability(coverage: AdNetworkSiteCoverage): AdNe const availableSorts: AdNetworkSitesAvailability["availableSorts"] = ["domain"]; const availableFilters: AdNetworkSitesAvailability["availableFilters"] = []; // The table shows niches as soon as any site in scope has one; unsorted rows read "Not listed". - // Niche charts and pages keep the stricter hasAdNetworkNicheCoverage gate. + // Niche charts and pages need hasAdNetworkNicheCoverage's 100-site sample. const nicheReady = coverage.classified > 0; // data-gate: niche run; traffic run; RDAP run; platform run; publisher-name run; verifier. if (nicheReady) { availableColumns.push("niche"); availableFilters.push("niche"); } diff --git a/lib/ad-networks-types.ts b/lib/ad-networks-types.ts index 9eb1d75f..14440e7c 100644 --- a/lib/ad-networks-types.ts +++ b/lib/ad-networks-types.ts @@ -161,7 +161,7 @@ export type AdNetworkCheckerSiteView = { }; export type AdNetworkSiteResponse = { domain: string; found: boolean; site: AdNetworkCheckerSiteView | null }; -export type AdNetworkJoiningRule = AdNetworkRef & { amount: number; unit: "sessions" | "pageviews" | "visitors"; label?: string }; +export type AdNetworkJoiningRule = AdNetworkRef & { amount: number; unit: "sessions" | "pageviews" | "visitors" | "visits" | "monthly active users"; label?: string }; export type AdNetworkDirectorySort = "most-sites" | "easiest-to-join" | "by-niche"; export type AdNetworkDirectoryCard = AdNetworkListRow & { confirmed_share: number | null; rank: number | null; minTraffic: AdNetworkJoiningRule | null; diff --git a/lib/ad-revenue-calculator/engine.ts b/lib/ad-revenue-calculator/engine.ts new file mode 100644 index 00000000..daa792cf --- /dev/null +++ b/lib/ad-revenue-calculator/engine.ts @@ -0,0 +1,240 @@ +// Ad revenue and RPM calculator. Three tabs share one monthly traffic number and one unit: +// Revenue: revenue = traffic × RPM ÷ 1,000 +// CPM to RPM: RPM = CPM × ad impressions per pageview (or per session) +// Find RPM: RPM = revenue ÷ traffic × 1,000 +// Money is kept in cents and every answer is worked out as an exact fraction before one +// half-up rounding, so yearly figures are exact rather than 12 × a rounded month. + +export const AD_REVENUE_TABS = ["revenue", "cpm", "rpm"] as const; +export type AdRevenueTab = (typeof AD_REVENUE_TABS)[number]; +export const TRAFFIC_UNITS = ["pageviews", "sessions"] as const; +export type TrafficUnit = (typeof TRAFFIC_UNITS)[number]; + +export type AdRevenueInput = { + tab: string; + unit: string; + traffic: string; + rpm: string; + cpm: string; + impressions: string; + revenue: string; +}; +export type AdRevenueField = "traffic" | "rpm" | "cpm" | "impressions" | "revenue"; +export type AdRevenueErrors = Partial>; + +export const AD_REVENUE_EXAMPLE_INPUT: AdRevenueInput = { + tab: "revenue", + unit: "pageviews", + traffic: "50,000", + rpm: "12.00", + cpm: "3.00", + impressions: "4", + revenue: "600.00", +}; + +/** A money amount in cents, after rounding. `underCent` marks a positive amount that rounds to 0. */ +export type Cents = { cents: bigint; underCent: boolean }; + +export type AdRevenueValues = { + tab: AdRevenueTab; + unit: TrafficUnit; + /** Monthly traffic, or null when the CPM to RPM tab leaves it blank. */ + traffic: bigint | null; + rpm: Cents; + monthly: Cents | null; + yearly: Cents | null; + /** CPM to RPM only: the inputs behind the RPM, and ad impressions when traffic is known. */ + cpmCents: bigint | null; + impressionsHundredths: bigint | null; + impressions: { monthly: bigint; yearly: bigint } | null; + /** Find RPM only: the monthly revenue entered. */ + revenueCents: bigint | null; +}; + +export type AdRevenueCalculation = + | { status: "valid"; values: AdRevenueValues; errors: AdRevenueErrors } + | { status: "invalid"; values: null; errors: AdRevenueErrors }; + +export const MAX_TRAFFIC = 10_000_000_000n; +export const MAX_MONEY_CENTS = 10_000_000_000n; // $100,000,000 +export const MAX_IMPRESSIONS_HUNDREDTHS = 100_000n; // 1,000 per pageview or session + +export function isAdRevenueTab(value: unknown): value is AdRevenueTab { + return typeof value === "string" && (AD_REVENUE_TABS as readonly string[]).includes(value); +} + +export function isTrafficUnit(value: unknown): value is TrafficUnit { + return typeof value === "string" && (TRAFFIC_UNITS as readonly string[]).includes(value); +} + +/* ---------------- parsing ---------------- */ + +type Parsed = { ok: true; value: bigint } | { ok: false; error: string } | { ok: true; value: null }; + +function clean(raw: string): string { + return raw.replace(/[\s,$]/g, ""); +} + +/** A non-negative decimal with up to `decimals` places, scaled to a whole number. Blank gives null. */ +function parseScaled(raw: string, decimals: number, max: bigint, maxText: string, example: string): Parsed { + const text = clean(raw); + if (!text) return { ok: true, value: null }; + if (text.startsWith("-")) return { ok: false, error: "Enter 0 or more." }; + const match = /^(\d*)(?:\.(\d*))?$/.exec(text); + if (!match || (!match[1] && !match[2])) return { ok: false, error: `Enter a number, such as ${example}.` }; + const fraction = match[2] ?? ""; + if (fraction.length > decimals) { + return { ok: false, error: decimals === 0 ? "Enter a whole number." : `Use up to ${decimals} decimals.` }; + } + const whole = match[1] || "0"; + if (whole.replace(/^0+/, "").length > 15) return { ok: false, error: `Enter ${maxText} or less.` }; + const value = BigInt(whole + fraction.padEnd(decimals, "0")); + if (value > max) return { ok: false, error: `Enter ${maxText} or less.` }; + return { ok: true, value }; +} + +function parseTraffic(raw: string): Parsed { + return parseScaled(raw, 0, MAX_TRAFFIC, "10,000,000,000", "50,000"); +} + +function parseMoney(raw: string): Parsed { + return parseScaled(raw, 2, MAX_MONEY_CENTS, "100,000,000", "12.50"); +} + +function parseImpressions(raw: string): Parsed { + return parseScaled(raw, 2, MAX_IMPRESSIONS_HUNDREDTHS, "1,000", "4"); +} + +/* ---------------- exact math ---------------- */ + +/** numerator ÷ denominator, rounded half up. Both are non-negative here. */ +function roundDiv(numerator: bigint, denominator: bigint): bigint { + return (numerator * 2n + denominator) / (denominator * 2n); +} + +function cents(numerator: bigint, denominator: bigint): Cents { + const value = roundDiv(numerator, denominator); + return { cents: value, underCent: value === 0n && numerator > 0n }; +} + +export function unitWord(unit: TrafficUnit, plural = true): string { + if (unit === "sessions") return plural ? "sessions" : "session"; + return plural ? "pageviews" : "pageview"; +} + +/* ---------------- calculation ---------------- */ + +export function calculateAdRevenue(input: AdRevenueInput): AdRevenueCalculation { + const tab: AdRevenueTab = isAdRevenueTab(input.tab) ? input.tab : "revenue"; + const unit: TrafficUnit = isTrafficUnit(input.unit) ? input.unit : "pageviews"; + const errors: AdRevenueErrors = {}; + const word = unitWord(unit); + + function read(field: AdRevenueField, parsed: Parsed, required: string | null): bigint | null { + if (!parsed.ok) { + errors[field] = parsed.error; + return null; + } + if (parsed.value === null && required) errors[field] = required; + return parsed.value; + } + + const traffic = read("traffic", parseTraffic(input.traffic), tab === "cpm" ? null : `Enter monthly ${word}.`); + + // RPM in cents, as an exact fraction rpmNumerator / rpmDenominator. + let rpmNumerator = 0n; + let rpmDenominator = 1n; + let cpmCents: bigint | null = null; + let impressionsHundredths: bigint | null = null; + let revenueCents: bigint | null = null; + + if (tab === "revenue") { + const rpm = read("rpm", parseMoney(input.rpm), `Enter your ${unit === "sessions" ? "session" : "page"} RPM.`); + if (rpm !== null) rpmNumerator = rpm; + } else if (tab === "cpm") { + cpmCents = read("cpm", parseMoney(input.cpm), "Enter your CPM."); + impressionsHundredths = read( + "impressions", + parseImpressions(input.impressions), + `Enter ad impressions per ${unitWord(unit, false)}.`, + ); + if (cpmCents !== null && impressionsHundredths !== null) { + rpmNumerator = cpmCents * impressionsHundredths; + rpmDenominator = 100n; + } + } else { + revenueCents = read("revenue", parseMoney(input.revenue), "Enter your monthly ad revenue."); + if (traffic === 0n && !errors.traffic) errors.traffic = `Enter more than 0 ${word} to find RPM.`; + if (revenueCents !== null && traffic) { + rpmNumerator = revenueCents * 1000n; + rpmDenominator = traffic; + } + } + + if (Object.keys(errors).length) return { status: "invalid", values: null, errors }; + + // Revenue in cents = traffic × RPM ÷ 1,000. + const revenueDenominator = rpmDenominator * 1000n; + const monthly = traffic === null ? null : cents(traffic * rpmNumerator, revenueDenominator); + const yearly = traffic === null ? null : cents(traffic * rpmNumerator * 12n, revenueDenominator); + const impressions = tab === "cpm" && traffic !== null && impressionsHundredths !== null + ? { + monthly: roundDiv(traffic * impressionsHundredths, 100n), + yearly: roundDiv(traffic * impressionsHundredths * 12n, 100n), + } + : null; + + return { + status: "valid", + errors, + values: { + tab, + unit, + traffic, + rpm: cents(rpmNumerator, rpmDenominator), + monthly, + yearly, + cpmCents, + impressionsHundredths, + impressions, + revenueCents, + }, + }; +} + +/* ---------------- shared links ---------------- */ + +const TAB_FIELDS: Record = { + revenue: ["traffic", "rpm"], + cpm: ["cpm", "impressions", "traffic"], + rpm: ["revenue", "traffic"], +}; + +/** Only the active tab's fields go in the link, so it reopens exactly what was shown. */ +export function adRevenueShareParams(input: AdRevenueInput): Record { + const tab = isAdRevenueTab(input.tab) ? input.tab : "revenue"; + const params: Record = { tab, unit: isTrafficUnit(input.unit) ? input.unit : "pageviews" }; + for (const field of TAB_FIELDS[tab]) { + const value = input[field].trim(); + if (value) params[field] = value; + } + return params; +} + +/** + * A link counts as shared only when it names a tab. The active tab's fields come from the link, + * blank where the link leaves them out, so a CPM link without traffic stays without traffic. + * The other tabs keep the example values. + */ +export function adRevenueInputFromQuery(get: (key: string) => string): AdRevenueInput | null { + const tab = get("tab"); + if (!isAdRevenueTab(tab)) return null; + const unit = get("unit"); + const input: AdRevenueInput = { + ...AD_REVENUE_EXAMPLE_INPUT, + tab, + unit: isTrafficUnit(unit) ? unit : "pageviews", + }; + for (const field of TAB_FIELDS[tab]) input[field] = get(field); + return input; +} diff --git a/lib/card-art.ts b/lib/card-art.ts index 89dfc963..ed565edd 100644 --- a/lib/card-art.ts +++ b/lib/card-art.ts @@ -5,6 +5,8 @@ import { siteSpotLicensesArt } from "@/app/(site)/art/site--spot-licenses"; import { siteSpotCourseArt } from "@/app/(site)/art/site--spot-course"; import { siteSpotCliAppsArt } from "@/app/(site)/art/site--spot-cli-apps"; import { adNetworkCheckerArt } from "@/app/ui/art/ad-network-checker"; +import { adNetworkRequirementsCheckerArt } from "@/app/ui/art/ad-network-requirements-checker"; +import { adRevenueCalculatorArt } from "@/app/ui/art/ad-revenue-calculator"; import { arpuArpaCalculatorArt } from "@/app/ui/art/arpu-arpa-calculator"; import { arrCalculatorArt } from "@/app/ui/art/arr-calculator"; import { backup321Art } from "@/app/ui/art/backup-321"; @@ -52,6 +54,7 @@ import { nameserverArt } from "@/app/ui/art/nameserver"; import { netRevenueRetentionCalculatorArt } from "@/app/ui/art/net-revenue-retention-calculator"; import { pixelsToPrintSizeArt } from "@/app/ui/art/pixels-to-print-size"; import { punycodeArt } from "@/app/ui/art/punycode"; +import { publisherToolsArt } from "@/app/ui/art/publisher-tools"; import { raidArt } from "@/app/ui/art/raid"; import { raidzExpansionArt } from "@/app/ui/art/raidz-expansion"; import { rebuildArt } from "@/app/ui/art/rebuild"; @@ -108,6 +111,8 @@ const art: Record = { "software-licenses-for-self-hosting": siteSpotLicensesArt, "ad-network-checker": adNetworkCheckerArt, + "ad-network-requirements-checker": adNetworkRequirementsCheckerArt, + "ad-revenue-calculator": adRevenueCalculatorArt, "annual-plan-discount-calculator": annualPlanDiscountCalculatorArt, "arpu-arpa-calculator": arpuArpaCalculatorArt, "arr-calculator": arrCalculatorArt, @@ -171,6 +176,7 @@ const art: Record = { "nginx-proxy-pass-calculator": siteSpotNginxProxyPassArt, "pixels-to-print-size": pixelsToPrintSizeArt, "productivity-tools": siteSpotKeyboardShortcutsArt, + "publisher-tools": publisherToolsArt, "punycode": punycodeArt, "raid": raidArt, "raidz-expansion": raidzExpansionArt, diff --git a/lib/card-icons.ts b/lib/card-icons.ts index 4dfa39ed..2c603530 100644 --- a/lib/card-icons.ts +++ b/lib/card-icons.ts @@ -1,6 +1,6 @@ import { Activity, ArrowLeftRight, BadgeCheck, Barcode, BookOpen, Building2, CalendarClock, Calculator, - CalendarX, ChevronsRight, ClipboardList, Columns3, Database, FileClock, + CalendarX, ChevronsRight, ClipboardList, Coins, Columns3, Database, FileClock, FileKey, FileSearch, GitBranch, Globe, HardDrive, HouseWifi, Image, Keyboard, FlaskConical, ListChecks, Receipt, Rocket, Scale, Languages, Layers3, LayoutGrid, Network, RefreshCw, Route, Search, Server, ServerCog, ShieldCheck, SquareTerminal, TrendingDown, TrendingUp, UserSearch, @@ -31,6 +31,7 @@ const icons: Record = { calculator: Calculator, "chevrons-right": ChevronsRight, "clipboard-list": ClipboardList, + coins: Coins, columns3: Columns3, database: Database, "file-clock": FileClock, diff --git a/lib/registered-site-pages.json b/lib/registered-site-pages.json index 9e1a2c89..4349fda5 100644 --- a/lib/registered-site-pages.json +++ b/lib/registered-site-pages.json @@ -3,11 +3,13 @@ "/[slug]", "/about", "/ad-network-checker", + "/ad-network-requirements-checker", "/ad-networks", "/ad-networks/[slug]", "/ad-networks/niches", "/ad-networks/niches/[niche]", "/ad-networks/stats", + "/ad-revenue-calculator", "/annual-plan-discount-calculator", "/arpu-arpa-calculator", "/arr-calculator", diff --git a/scripts/ad-network-requirements-checker/ready.sql b/scripts/ad-network-requirements-checker/ready.sql new file mode 100644 index 00000000..496c677d --- /dev/null +++ b/scripts/ad-network-requirements-checker/ready.sql @@ -0,0 +1,3 @@ +select count(*) = cardinality($1::text[]) as ready +from public.ad_networks +where slug = any($1::text[]) diff --git a/scripts/stack127/marker-art/figures.mjs b/scripts/stack127/marker-art/figures.mjs index 1d284c73..de439207 100644 --- a/scripts/stack127/marker-art/figures.mjs +++ b/scripts/stack127/marker-art/figures.mjs @@ -1042,7 +1042,54 @@ function toolSpot(spec, A) { const d = spec.data; const cx = A.w / 2; const cy = A.h / 2; - if (d.motif === "customerEconomics") { + if (d.motif === "adNetworkShortlist") { + // Three choices point from one post; the longest, picked route gets the accent. + A.line(42, 16, 42, 82, { stroke: "@ink", strokeWidth: 2.4 }); + A.line(32, 83, 52, 83, { stroke: "@ink", strokeWidth: 1.7 }); + A.arrow(46, 28, 108, 28, { tone: "@primary", sw: 2.3 }); + A.arrow(46, 49, 97, 49, { tone: "@ink", sw: 2.0 }); + A.arrow(46, 70, 83, 70, { tone: "@ink", sw: 2.0 }); + const star = []; + for (let point = 0; point < 10; point += 1) { + const radius = point % 2 === 0 ? 4.3 : 1.9; + const angle = -Math.PI / 2 + (point * Math.PI) / 5; + star.push([119 + Math.cos(angle) * radius, 21 + Math.sin(angle) * radius]); + } + A.polygon(star, { stroke: "@primary", fill: "@primary", fillStyle: "solid", strokeWidth: 1.4 }); + drawIcon(A, "browserPage", 42, 96, 23, "@ink"); + return; + } else if (d.motif === "publisherTools") { + // One site page sits beside a measured traffic gate and a separate network-tag gate. + drawIcon(A, "browserPage", 34, 56, 35, "@ink"); + drawIcon(A, "heightGate", 79, 56, 43, "@ink"); + A.line(111, 22, 111, 94, { stroke: "@ink", strokeWidth: 2.1 }); + A.line(111, 94, 130, 94, { stroke: "@ink", strokeWidth: 1.6 }); + A.line(111, 29, 129, 29, { stroke: "@ink", strokeWidth: 1.6 }); + drawIcon(A, "tag", 120, 52, 20, "@primary"); + return; + } else if (d.motif === "adRevenue") { + // A stack of site pages turns into a stack of coins: traffic becomes ad revenue. + A.line(21, 23, 76, 23, { stroke: "@sub" }); + A.line(76, 23, 76, 72, { stroke: "@sub" }); + drawIcon(A, "browserPage", 40, 57, 44, "@ink"); + A.arrow(81, 58, 96, 58, { tone: "@sub", sw: 2.0 }); + const coinX = 117; + const rx = 16; + const ry = 5.5; + const rim = (y) => { + const points = []; + for (let step = 0; step <= 12; step += 1) { + const angle = (step * Math.PI) / 12; + points.push([coinX + Math.cos(angle) * rx, y + Math.sin(angle) * ry]); + } + return points; + }; + A.ellipse(coinX, 36, rx * 2, ry * 2, { stroke: "@primary" }); + A.line(coinX - rx, 36, coinX - rx, 84, { stroke: "@primary" }); + A.line(coinX + rx, 36, coinX + rx, 84, { stroke: "@primary" }); + for (const y of [52, 68, 84]) A.linearPath(rim(y), { stroke: "@primary" }); + return; + } else if (d.motif === "customerEconomics") { drawIcon(A, "user", 28, cy, 23, "@ink"); A.line(49, cy, 58, cy, { stroke: "@sub" }); A.line(58, 23, 58, 87, { stroke: "@sub" }); diff --git a/scripts/stack127/marker-art/icons.mjs b/scripts/stack127/marker-art/icons.mjs index 1734f120..57c174fa 100644 --- a/scripts/stack127/marker-art/icons.mjs +++ b/scripts/stack127/marker-art/icons.mjs @@ -66,6 +66,27 @@ export const ICONS = { ], { ...outline, stroke: "@primary" }); A.line(cx - 0.13 * s, cy + 0.4 * s, cx + 0.2 * s, cy + 0.4 * s, outline); }, + browserPage(A, cx, cy, s, tone = "@ink") { + const x = cx - 0.62 * s; + const y = cy - 0.55 * s; + const width = 1.24 * s; + const height = 1.1 * s; + A.rect(x, y, width, height, { stroke: tone }); + A.line(x, y + 0.27 * s, x + width, y + 0.27 * s, { stroke: tone }); + for (const dotX of [x + 0.14 * s, x + 0.3 * s, x + 0.46 * s]) { + A.dot(dotX, y + 0.14 * s, 1.2, "@sub"); + } + A.line(x + 0.18 * s, y + 0.49 * s, x + 0.91 * s, y + 0.49 * s, { stroke: "@sub" }); + A.line(x + 0.18 * s, y + 0.69 * s, x + 0.76 * s, y + 0.69 * s, { stroke: "@sub" }); + A.line(x + 0.18 * s, y + 0.89 * s, x + 0.62 * s, y + 0.89 * s, { stroke: "@sub" }); + }, + heightGate(A, cx, cy, s, tone = "@ink") { + const postX = cx - 0.2 * s; + A.line(postX, cy - 0.58 * s, postX, cy + 0.58 * s, { stroke: tone, strokeWidth: 2.4 }); + A.line(postX - 0.14 * s, cy + 0.58 * s, postX + 0.3 * s, cy + 0.58 * s, { stroke: tone }); + A.line(postX, cy - 0.1 * s, cx + 0.44 * s, cy - 0.1 * s, { stroke: "@primary", strokeWidth: 2.1 }); + A.line(cx + 0.3 * s, cy - 0.23 * s, cx + 0.3 * s, cy + 0.04 * s, { stroke: "@primary" }); + }, server(A, cx, cy, s, tone = "@ink") { const top = cy - 0.62 * s; const h = 1.24 * s; diff --git a/skills/stack127/tools/stack127-tool-research/scripts/searxng-search.mjs b/scripts/stack127/search-services/searxng-search.mjs similarity index 97% rename from skills/stack127/tools/stack127-tool-research/scripts/searxng-search.mjs rename to scripts/stack127/search-services/searxng-search.mjs index 630f3425..2e0a71a9 100644 --- a/skills/stack127/tools/stack127-tool-research/scripts/searxng-search.mjs +++ b/scripts/stack127/search-services/searxng-search.mjs @@ -1,7 +1,7 @@ #!/usr/bin/env node const HELP = `Usage: - node skills/stack127/tools/stack127-tool-research/scripts/searxng-search.mjs [options] + node scripts/stack127/search-services/searxng-search.mjs [options] Options: --url SearXNG base URL or /search URL diff --git a/skills/stack127/stack127-tool-copywriting/SKILL.md b/skills/stack127/stack127-tool-copywriting/SKILL.md new file mode 100644 index 00000000..e65e3253 --- /dev/null +++ b/skills/stack127/stack127-tool-copywriting/SKILL.md @@ -0,0 +1,50 @@ +--- +name: stack127-tool-copywriting +description: Write or rewrite the words for a stack127 tool page or tool catalog: title, SEO title, meta description, card, intro, usage, content, and methodology. Lean and direct. +--- + +# stack127 tool copywriting + +Someone came to use the tool. Every line should help them use it or trust its answer. More words make the useful line harder to find, so write as little as you can. + +Read `stack127_docs/writing-style.md` first. Use the finished tool with a real example before you write. + +## What you write + +| Part | Goes in | Length | Its job | +| --- | --- | --- | --- | +| Title (H1) | Database | Short | The question the tool answers, in the searcher's words. | +| SEO title | Database | Under 60 characters | The tool word people search, "free", and the answer. | +| Meta description | Database | 140 to 160 characters | What they get, and one detail that sets it apart. | +| Card name and description | Database | A few words, then one short sentence | Name the task. | +| Intro | `content/intro.mdx` | 2 to 3 sentences | Their situation, what they get, and how to start. | +| Usage | `content/usage.mdx` | Under 150 words | Only the inputs that need explaining, and how to read the result. | +| Content | `content/article.mdx` | As short as it can be | What users need next: a reference table, terms they meet, doubts the result raises. | +| Methodology | Last section of `content/article.mdx` | 2 to 4 sentences | How the answer is worked out, and its limits. | + +## Cut these + +- Headings about one brand or one case on a general page. "Can I join Mediavine at 40,000 pageviews?" doesn't belong on a page about every network. +- Worked examples that repeat what the tool already shows when it opens. +- Explanations of controls that explain themselves, such as Reset, Copy link, or a disclosure. +- Usage lines that repeat a label or hint. +- Text that repeats a table. +- Setup lines before the point, such as "A few reasons:" or "Here's what you need to know." +- Long table cells and long bullets. One short idea each. +- Any section a user wouldn't miss if it were gone. + +## Check + +Read every sentence and ask: does this help the person use the tool or trust its answer? If not, cut it. Then read it again and cut once more. + +- Every fact matches the tool and a primary source. Link the source. +- Headings are questions people search, answered in the first sentence. +- Run `node scripts/stack127/content/check-mdx.mjs`. + +The ad network requirements checker went from 1,500 words to 550 this way. Its `content/` folder is the model to follow. + +## Hand off + +Give the owner every part in chat, in the order of the table, with word counts. Put it on the page only after they approve. Content goes in MDX, as `stack127_docs/page-content.md` describes. Titles, SEO text, and cards go through the publish manifest, as `stack127_docs/page-publishing.md` describes. Copy edits leave `tool_version` alone. + +Catalog pages such as `/publisher-tools` follow the same rules. Their content lives in `app/(site)/(catalogs)/[slug]/content//`. diff --git a/skills/stack127/stack127-tool-copywriting/agents/openai.yaml b/skills/stack127/stack127-tool-copywriting/agents/openai.yaml new file mode 100644 index 00000000..e72d4e98 --- /dev/null +++ b/skills/stack127/stack127-tool-copywriting/agents/openai.yaml @@ -0,0 +1,4 @@ +interface: + display_name: "stack127 tool copywriting" + short_description: "Write lean, direct copy for a tool page" + default_prompt: "Use $stack127-tool-copywriting to write this tool page's title, SEO text, card, intro, usage, content, and methodology, and give it to the owner for approval." diff --git a/skills/stack127/stack127-tool-page/SKILL.md b/skills/stack127/stack127-tool-page/SKILL.md new file mode 100644 index 00000000..e60ad495 --- /dev/null +++ b/skills/stack127/stack127-tool-page/SKILL.md @@ -0,0 +1,54 @@ +--- +name: stack127-tool-page +description: Build or rework one stack127 tool page with the owner, from their idea to a published page. The plan and the copy each wait for the owner's yes. Use for every tool page. +--- + +# stack127 tool page + +One tool at a time. The owner brings a tool name and a rough idea. You plan it with them, build it, write it, and publish it. Quality over speed. + +You run this yourself. Use helpers where they do a part better, as "Agent roles" in `AGENTS.md` describes: Luna or Haiku for research, Sol for hard backend logic. Read what comes back before you use it. + +## Steps + +1. **Research.** Find who searches for this, what they already know, and what they want answered. Use real searches, "People also ask", forums, and 3 to 5 competitors you actually try. Check every fact that drives an answer against a primary source. Write `content_docs//research.md` with only what changes the tool. +2. **Plan.** Write a short `content_docs//tool-spec.md`. See "The spec" below. Then show the owner, in the T3 chat: + - **A mockup** of the inputs, the Advanced section, and the result, as one HTML page with `html_render`. Make it look like the site: dark theme, colors and fonts from `app/globals.css`, and the shapes of our shared components. Fill it with realistic example values and the result they'd really give. + - **How it works**, in plain English: what goes in, how the answer is worked out, and what comes out. Write it for someone new to coding. +3. **Refine.** Change the plan and mockup until the owner says yes, and show each version in chat. Then update `tool-spec.md` to match. +4. **Build.** The logic first, then the interface, matching the agreed mockup. Follow `stack127_docs/tool-interface.md` and `stack127_docs/shared-ui.md`, and wire the route like `/cac-payback-calculator`. Add one focused test for the logic. Run `npm run quality`. Check the real page at desktop and mobile width in both themes, with one correct and one invalid example. Give the owner the Tailscale preview URL. +5. **Copy.** Follow `$stack127-tool-copywriting`. Give the owner the copy in chat. Don't put it on the page yet. +6. **Finish.** When the owner approves the copy, add it to the route's `content/*.mdx`. Make the card art with `$marker-art-draw`. Publish to development with the tools publisher, as `stack127_docs/page-publishing.md` describes, and check the real page and its catalog card. +7. **Release.** Get a Sol review of the diff and fix what it finds. Then ask the owner once before running `$stack127-release-e2e`. + +Preview with `npm run dev`, which refreshes the page list first. Draft titles in development are fine before the copy is approved, and you should stop any server you started once you're done. + +## Judgement + +The plan is where a tool goes right or wrong. Check each point before you show it: + +- **Ask only what people know offhand.** If a number can be worked out from another input, work it out. Never ask for the same thing twice in different words. +- **Require the least that gives a real answer.** Usually one or two inputs. Everything else is optional, and blank means unknown. +- **Estimate instead of "can't tell".** People come for an answer. Give a best estimate, mark it as one, and say what would sharpen it. A result full of unknowns has failed. +- **Every input changes the result.** If it doesn't, cut it. +- **Most important inputs first.** Put related inputs side by side. +- **Advanced is for few people.** Each field there is optional and has a reason to exist. +- **The answer comes first.** One line that answers the question, then the detail. +- **Look like the site.** Reuse shared components and the patterns sibling tools use. Don't invent a new style. + +Example: the first ad network requirements checker asked for domain age and registration date, asked for traffic twice, and filled the result with "can't tell". The version that shipped asks seven things people know, requires two, and returns a ranked shortlist of estimates. + +## The spec + +Keep `tool-spec.md` short. It holds what a builder needs to build without guessing, and nothing else: + +- **Who and why.** Who uses it, the question they bring, and what they get. +- **Inputs.** A table: label, Basic or Advanced, required or optional, hint, and what it changes. +- **Result.** What shows first, then the rest. The example values the tool opens with, and their result. +- **How it works.** The rules or formula, with sources. Invalid input, limits, and unknowns. +- **Build.** The files, the main functions, and the shared components used. +- **Page.** Route, catalog, and the card art idea. + +## Reworking a live tool + +Use the same steps, starting from the live page and its spec. A change to inputs or results needs a `tool_version` bump. See `stack127_docs/tool-pages.md`. diff --git a/skills/stack127/stack127-tool-page/agents/openai.yaml b/skills/stack127/stack127-tool-page/agents/openai.yaml new file mode 100644 index 00000000..b4e158ae --- /dev/null +++ b/skills/stack127/stack127-tool-page/agents/openai.yaml @@ -0,0 +1,4 @@ +interface: + display_name: "stack127 tool page" + short_description: "Plan, build, write, and publish one tool page with the owner" + default_prompt: "Use $stack127-tool-page to take this tool from the owner's idea to a published page, stopping for the owner's yes on the plan and the copy." diff --git a/skills/stack127/stack127-topic-research/SKILL.md b/skills/stack127/stack127-topic-research/SKILL.md index 9beca373..c6068005 100644 --- a/skills/stack127/stack127-topic-research/SKILL.md +++ b/skills/stack127/stack127-topic-research/SKILL.md @@ -7,7 +7,7 @@ description: Find evidence-backed resource and product ideas for stack127's indi ## Pipeline role and model routing -When topic research feeds the full tool pipeline, the main orchestrator starts it with the newest Luna model at `max` reasoning. This worker never starts another pipeline worker or silently turns a topic idea into implementation. Read `stack127_docs/tool-pipeline.md` when proposing a tool so its feasibility verdict and promise boundary are explicit. +Topic research proposes ideas. It never turns one into a tool on its own: the owner picks each tool and builds it with `skills/stack127/stack127-tool-page/SKILL.md`. When you propose a tool, say plainly whether it can be built and what it would promise. Use this skill from the stack127 repository root when researching resources or products. Find concrete tasks where existing resources are fragmented, weak, too vendor-specific, or missing a useful tool. @@ -37,7 +37,7 @@ Read `stack127_docs/product-direction.md` before choosing subjects or scoring au 2. Build a demand signal for each candidate: - Search web results for the exact problem phrasing. - - When available, run `node skills/stack127/tools/stack127-tool-research/scripts/searxng-search.mjs --engines bing,duckduckgo ""` and preserve the query, engines, date, and result URLs in the research notes. + - When available, run `node scripts/stack127/search-services/searxng-search.mjs --engines bing,duckduckgo ""` and preserve the query, engines, date, and result URLs in the research notes. - Check Reddit, forums, GitHub issues/discussions, vendor docs, and community docs when accessible. - Prefer repeated pain patterns over one-off curiosity. - If Reddit is blocked, say so and use public search snippets, forum pages, official docs, and issue trackers instead. diff --git a/skills/stack127/tools/stack127-tool-audit/SKILL.md b/skills/stack127/tools/stack127-tool-audit/SKILL.md deleted file mode 100644 index 06b5aaab..00000000 --- a/skills/stack127/tools/stack127-tool-audit/SKILL.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: stack127-tool-audit -description: Independently check one complete stack127 tool for correct answers, a simple Basic flow for most people, usable interaction, responsive rendering, clear content, and release readiness. ---- - -# stack127 tool audit - -Judge the tool as its users would, without relying on the builder's explanation. Audits are read-only. Report each defect with its owner: backend to Sol, data to Luna, design, plan, or copy to the Opus planning session, and wiring or card art to integration. - -Read the spec, engine, route, `content/*.mdx`, and tests. Check against `stack127_docs/tool-interface.md`, `writing-style.md`, `page-content.md`, and `shared-ui.md`. - -1. **Answers.** Check normal, boundary, and invalid examples against primary sources or hand calculations. Include unknown versus zero, units, rounding, timeouts, and escaping of untrusted output where they apply. -2. **First use and depth.** Open the real development page as the first-time visitor in the spec's "People and questions", then as a pro in this domain. Does it open on an example with its result? Can the visitor get the answer from Basic without reading? Would the pro find what serious competitors offer in Advanced? Can they scan the result, with the main answer first and smaller numbers readable? Does every required field show `*`? Does every limit answer instead of blanking? Use the Review list in `tool-interface.md`. -3. **Interaction.** Check desktop and mobile width in both themes: keyboard and focus, hints, overflow, charts, tables, links, and recovery from errors. -4. **Content.** Content follows `page-content.md`, with no placeholders left. -5. **Publication.** Development publication and version. One rank-1 primary catalog, and one card in each planned catalog. The tool-specific card art reads at real size in both themes, and an `icon` fallback blocks release. If a publish manifest exists, run its `prepare` and `preview` against development. Never write production data. - -See `skills/stack127/references/homelab-browser-and-search.md` for a headless browser. After owners fix things, recheck only what changed. - -Return the verdict, the defects with owners, and anything still blocking release. Don't create evidence folders, screenshots by default, or hashes. diff --git a/skills/stack127/tools/stack127-tool-audit/agents/openai.yaml b/skills/stack127/tools/stack127-tool-audit/agents/openai.yaml deleted file mode 100644 index 754acd96..00000000 --- a/skills/stack127/tools/stack127-tool-audit/agents/openai.yaml +++ /dev/null @@ -1,4 +0,0 @@ -interface: - display_name: "stack127 tool quality audit" - short_description: "Audit tool correctness, UI, writing, and readiness" - default_prompt: "Use $stack127-tool-audit to check this tool's answers, common interaction, mobile rendering, content, and release readiness." diff --git a/skills/stack127/tools/stack127-tool-backend/SKILL.md b/skills/stack127/tools/stack127-tool-backend/SKILL.md deleted file mode 100644 index 2d546ab8..00000000 --- a/skills/stack127/tools/stack127-tool-backend/SKILL.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -name: stack127-tool-backend -description: Build the backend for one stack127 tool from the spec's backend contract, with focused correctness tests. No UI. ---- - -# stack127 tool backend - -Read `AGENTS.md`, the complete tool spec, and `stack127_docs/tool-pages.md`. Build only the backend. Opus builds the frontend in the next round against the same contract. - -Build exactly what the spec's Backend contract describes: the same function names, inputs, outputs, data shapes, and errors. Do not redesign the product or change the contract. If the contract is unclear, wrong, or cannot be built as written, stop and report the gap to the main agent so it can go back to the planning session. - -1. Build parsing, validation, formulas, lookup logic, and serialization as plain TypeScript outside React. -2. Build any API routes, server data loaders, external lookups, timeouts, and caching the contract lists. -3. Build any data scripts, migrations, or maintained datasets the contract lists. Keep migrations, scripts, and docs aligned. -4. Add one focused unit test file for independently known normal, boundary, and invalid examples from the spec. Add more only for a real high-risk calculation or recovery path. Run it. -5. For a new route that needs a database row to render, use the publisher against development with the reviewed title, search metadata, cards, and catalog memberships. Page words live in MDX beside the route. Do not fill retired Markdown fields or create another temporary content-writing script. -6. Check one correct and one invalid example directly against the backend, such as through the test or a request to the API route. - -Do not build the page, client components, styles, or card art. Do not write page content, create manifests or evidence files, or run the whole repository test collection. This backend task does not authorize production data, commits, pushes, or deployment. A separate coordinator-approved production task follows the approval rules in `AGENTS.md` and the release skill. - -Return the files you built, the exported functions or endpoints, the test result, and any contract gap. - -For an existing tool, a behavior change needs a `tool_version` bump. See `stack127_docs/tool-pages.md`, and confirm the version with the coordinator. diff --git a/skills/stack127/tools/stack127-tool-backend/agents/openai.yaml b/skills/stack127/tools/stack127-tool-backend/agents/openai.yaml deleted file mode 100644 index eaf717d8..00000000 --- a/skills/stack127/tools/stack127-tool-backend/agents/openai.yaml +++ /dev/null @@ -1,4 +0,0 @@ -interface: - display_name: "stack127 Tool Backend" - short_description: "Build one stack127 tool's backend from its contract" - default_prompt: "Use $stack127-tool-backend to build this tool's backend from the contract in tool-spec.md, add focused correctness tests, and stop before any UI work." diff --git a/skills/stack127/tools/stack127-tool-content-integration/SKILL.md b/skills/stack127/tools/stack127-tool-content-integration/SKILL.md deleted file mode 100644 index 671972b4..00000000 --- a/skills/stack127/tools/stack127-tool-content-integration/SKILL.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -name: stack127-tool-content-integration -description: Wire a finished stack127 tool into its development page, with its route, content, card art, catalogs, and publishing, then run the full checks. Also integrates user-supplied tool copy. ---- - -# stack127 tool content integration - -Use this skill after `$stack127-tool-writing` in the normal pipeline, or when a user supplies replacement copy. You run in your own session, so the Opus planning session can stay on design and words. Connect and check; don't redesign or rewrite. Read the draft files or supplied words, the spec, `stack127_docs/page-content.md`, `stack127_docs/page-publishing.md`, `stack127_docs/tool-pages.md`, `stack127_docs/tool-catalogs.md`, `stack127_docs/seo.md`, the route, and current development rows. The introduction, usage, and article go in the route's `content/*.mdx` files. The visible title, search title and description, and shared catalog card copy go to the database through the publisher. Interface words and the tool component belong to the Opus planning session; edit only the route page, content wiring, and card art. Use `stack127_docs/writing-style.md` for any wording edits. If a required field is missing or a claim conflicts with the tool or sources, return it to the main agent for the planning session or resolve it with the user; do not invent replacement copy. - -1. Put the content in the route's `content/` folder: `intro.mdx`, `usage.mdx` when there is usage, and `article.mdx`. The Opus planning session usually writes them. For supplied words, write them yourself with the blocks and rules in `page-content.md`. The page must import its MDX content before publishing. -2. Wire the route as `/cac-payback-calculator` does, with `ToolPageShell` and the fetched `toolPage`. Pass `` to `ToolPageHeader`'s `intro`, and put `` and `
    ` inside `ToolPageArticle`. Run `node scripts/stack127/content/check-mdx.mjs` and fix what it reports. -3. Write the tool's publish manifest in `tmp/page-publishing//`. Put the visible title in `content.title` and `meta_title` and `meta_description` in the registry patch when the draft changes them. A new tool also needs the content fields the publisher still requires; see "Content fields" in `page-publishing.md`. An unpublished page returns 404, and the publisher's check expects that 404. For a new tool in the pipeline, set `registry.is_published` to `true` explicitly so the development page can be previewed. Its catalogs must be published too. The same value carries to production at release. For other edits, leave publication fields alone unless the main agent asks. -4. Read the spec's Catalog placement and the current catalog memberships. Confirm that the primary and every secondary catalog exist. Choose an unused display order for each new placement and the approved card icon and registered tool-specific art key. A new tool cannot use the `icon` art fallback. Put the card fields and the complete ordered catalog list in the manifest. Do not put cards in route code. If a new catalog is required and the main agent has not supplied it, return that work before using a substitute placement. -5. Make the card art. Use `$marker-art-draw` with the spec's brief to make the `toolSpot` in `app/ui/art/`, register its key in `lib/card-art.ts`, and check it at card size. A new tool never uses the `icon` fallback. -6. Add the readiness requirements: the route file, the registered art file, any read-only SQL checks the tool needs, and smoke paths with expected visible text. -7. Start `npm run dev` and `npm run stack127:cache:watch:local` as background services. Run the tools publisher's `prepare` and `preview` against development and review the result, then run `apply`. It also checks the public page. If it says the batch committed but the check failed, run `verify` with the same plan. Catalog card edits and membership changes do not change `tool_version`. Set a new version only when the main agent names one. -8. Run `npm run quality`. Run only focused renderer, link, figure, or data checks when the changed code needs them. -9. Open the actual development tool page and every assigned catalog, using the headless fallback in `skills/stack127/references/homelab-browser-and-search.md` when needed. Use the tool at desktop and mobile width in both themes, with one correct example, one invalid example, and one value past a domain limit. Change each input and confirm the result moves. Open a hint by tap and by keyboard. Fix broken wiring yourself. Send design, layout, and copy problems to the main agent for the planning session. Confirm the content renders in the right order, with its headings, blocks, and links, and that the card words, search metadata, and primary tool action work. For a published new tool, inspect its drawing at the real card size at desktop and mobile width in dark and light themes; simplify the spec and regenerate if its subject, spacing, or contrast fails. Unpublished tools stay out of public catalog cards until their registry row is published; inspect the generated art at card size and flag the public-card check for publication. - -When content fixes come back, edit the MDX files. When title, search text, or card fixes come back, update the manifest and run the publisher in development again, so the manifest always matches what was checked. The single-purpose tool-page commands are fine for a quick development check of cards, version, or repository fields. - -If the main agent wants a public page kept out of search while it is still being improved, set `registry.is_indexable` to `false`. New pages default to `true`; existing pages keep the setting when omitted. A published noindex page still appears in catalogs and sidebars. Check its own canonical, noindex robots tag, no JSON-LD, and absence from the sitemap. - -Do not calculate hashes, write receipts, or run a browser matrix. This integration task permits guarded development updates and the route and content file edits above. Production data, commits, pushes, and deployment need a separate coordinator-approved task under the rules in `AGENTS.md` and the release skill. Report the MDX files, the manifest path, changed fields, catalog ranks and orders, version, focused checks, and remaining issues. - -For an existing tool, a behavior change needs a `tool_version` bump. See `stack127_docs/tool-pages.md`, and confirm the version with the coordinator. diff --git a/skills/stack127/tools/stack127-tool-frontend/SKILL.md b/skills/stack127/tools/stack127-tool-frontend/SKILL.md deleted file mode 100644 index 46c82277..00000000 --- a/skills/stack127/tools/stack127-tool-frontend/SKILL.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -name: stack127-tool-frontend -description: Design and build the interface for one stack127 tool on top of its finished backend, the inputs, result, and every word in them, so people get their answer fast. ---- - -# stack127 tool frontend - -Opus runs this in the planning session, after Sol finishes the backend. Your job is the people using this tool. Build the interface the spec planned so they get their answer fast and want to share it. A separate integration session wires the route, content, card art, and publishing after you and runs the full checks, so keep your attention on the user. - -Read the spec, the backend, and `stack127_docs/tool-interface.md`. Dig into `shared-ui.md`, `design-system.md`, and `css-architecture.md` when you need them. Call the backend only through its contract. If the backend is wrong, report it for Sol instead of patching it. - -1. **Interface.** Build what the spec planned inside `ToolWorkbench`, `ToolFieldRow`, and `ToolResult` from `app/ui/tools/tool-workbench.tsx`, with every word final: labels, hints, and buttons. It opens on the example and its result. Make the result something the person would want to share. Keep the client island small and the styles beside the route. Don't write your own workbench band, width, or section gaps. The page stays static, so read shared links in a `-from-url.tsx` client wrapper with `useInitialQuery()`. If the route doesn't exist yet, add a bare page with `ToolPageShell`, as `/cac-payback-calculator` does, so you can see your work. -2. **Look at it.** Open the page at desktop and mobile width as a first-time visitor. Does the eye land on the answer? Can you scan the smaller numbers without labels wrapping? Try a few values and one invalid one. Fix what feels wrong. See `skills/stack127/references/homelab-browser-and-search.md` for a headless browser. - -For an existing tool, a behavior change needs a `tool_version` bump. See `stack127_docs/tool-pages.md`, and confirm the version with the coordinator. - -Don't write page content, make card art, publish data, commit, push, or deploy. Return the files, what you looked at, and any backend problem. diff --git a/skills/stack127/tools/stack127-tool-interface-design/SKILL.md b/skills/stack127/tools/stack127-tool-interface-design/SKILL.md deleted file mode 100644 index 0de53f1d..00000000 --- a/skills/stack127/tools/stack127-tool-interface-design/SKILL.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: stack127-tool-interface-design -description: Refine an existing stack127 tool's inputs, result, and layout so it's simple for most people, without changing its engine or article content. ---- - -# stack127 tool interface design - -Read the tool spec, `stack127_docs/tool-interface.md`, and the rendered page. Look at it as a first-time visitor would. Where does it make them read, dig for a number, or wonder what the result means? Fix that: - -- Move refinements most people skip into Advanced, and turn helper text into hints. -- Make the result about the person's own numbers, with a visual that makes it obvious. -- Move sources and caveats out of the result and into the page content. - -Keep formulas, APIs, publication state, and `content/*.mdx` unless the request includes them. If simplifying needs an engine change, such as a required field becoming optional, stop and report it for Sol. A bigger rework follows "Rework an existing tool" in `stack127_docs/tool-pipeline.md`. - -Check the real page at desktop and mobile width after editing. A behavior change needs a `tool_version` bump. See `stack127_docs/tool-pages.md`. diff --git a/skills/stack127/tools/stack127-tool-interface-plan/SKILL.md b/skills/stack127/tools/stack127-tool-interface-plan/SKILL.md deleted file mode 100644 index a509476c..00000000 --- a/skills/stack127/tools/stack127-tool-interface-plan/SKILL.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -name: stack127-tool-interface-plan -description: Plan a stack127 tool's Basic and Advanced inputs, hints, result timing, visual result, and components in tool-spec.md, and build any new shared components it needs. ---- - -# stack127 tool interface plan - -Opus runs this in the same planning session as `$stack127-tool-product-plan`. Fill the Interface section of `content_docs//tool-spec.md`. - -Read "People and questions", `stack127_docs/tool-interface.md` (especially "How a stack127 tool feels" and "Good and bad tools"), and `stack127_docs/shared-ui.md`. Look at the `/components-ui` gallery and a few sibling tools. - -Picture two people using it: the first-time visitor from "People and questions", and a pro who knows this domain well. Plan what each of them sees, and make the calls a designer with taste would make: - -- **Inputs.** Fill the Inputs table: Basic, Advanced, required or optional, the final label and hint wording, and what each input changes. Cut any input that changes nothing, and keep every option the pro needs. -- **Default state.** The example values it opens with, the result they produce, and the button's name. -- **Result.** The answer, then the visual that makes it obvious for this tool. Think about the relationship you're showing and pick the best form from any ECharts type, a shared component, or a custom SVG. Then the supporting numbers, any detail Advanced adds, and a share action if it's worth sharing. -- **Layout.** How the inputs group into `ToolFieldRow`s, and how the result reads at desktop and on phones. Ask where the eye lands first, and what someone who wants to dig in reads next. -- **States.** Stale results after an edit, invalid input, each domain limit answering instead of blanking, and anything else this tool can really hit. - -Sketch the desktop and phone layouts in words in the spec before building. - -If a component or chart type you need doesn't exist, build it now as a shared piece with a gallery example. Check it at desktop and mobile width in both themes, and run `npm run quality`. Name each new piece in the spec. - -Don't build the tool route or backend. Sol builds the backend next, then you build the frontend with `$stack127-tool-frontend` in this session. diff --git a/skills/stack127/tools/stack127-tool-interface-plan/agents/openai.yaml b/skills/stack127/tools/stack127-tool-interface-plan/agents/openai.yaml deleted file mode 100644 index 88467507..00000000 --- a/skills/stack127/tools/stack127-tool-interface-plan/agents/openai.yaml +++ /dev/null @@ -1,4 +0,0 @@ -interface: - display_name: "stack127 Tool Interface Plan" - short_description: "Decide a tool's interface before code" - default_prompt: "Use $stack127-tool-interface-plan to create a clean, implementation-ready interface contract for this tool, then stop before code." diff --git a/skills/stack127/tools/stack127-tool-orchestrator/SKILL.md b/skills/stack127/tools/stack127-tool-orchestrator/SKILL.md deleted file mode 100644 index f3d61b6e..00000000 --- a/skills/stack127/tools/stack127-tool-orchestrator/SKILL.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -name: stack127-tool-orchestrator -description: Run a stack127 tool from research through writing, development integration, and independent audit. ---- - -# stack127 tool orchestrator - -You're the coordinator. Read `AGENTS.md` for the lanes and `stack127_docs/tool-pipeline.md` for the rounds, sessions, and checks. Start each worker with `delegate_task` unless the round is your own lane, read what comes back, and send real gaps back to the same worker. Don't redo a worker's job or load every worker skill yourself. - -Give each tool its own Opus planning session, and never hand that session a second tool or integration work. Other workers usually get one tool each too; share one across tools only when the work is small and alike. - -Unless the user asks for speed, go slow: one tool at a time, with at most one or two agents running at once. Build shared work, such as one engine several tools use, once up front. See "Pace" in `tool-pipeline.md`. - -To rework an existing tool, follow "Rework an existing tool" in `tool-pipeline.md` instead. - -1. **Confirm** the tool name, flat route, job, existing work, publication state, and likely catalog. -2. **Research**, with Luna and `$stack127-tool-research`. Send it back if it doesn't clearly say who uses the tool and what they ask, or if competitors weren't actually used. -3. **Plan**, with the Opus planning session: `$stack127-tool-product-plan`, then `$stack127-tool-interface-plan`. Read the spec against the research. Does it take a real position on who it serves, keep Basic small and Advanced optional, give a precise backend contract, and plan a result worth sharing? Send gaps back. -4. **Backend**, with Sol and `$stack127-tool-backend`. Contract gaps go to the planning session. -5. **Interface**, back in the planning session, with `$stack127-tool-frontend`. Backend problems go to Sol. -6. Run `npm run quality` once both are done. CI runs the build. Don't build on the homelab. -7. **Writing**, back in the planning session, with `$stack127-tool-writing`. The session that planned the tool writes its page. After corrections, ask for one more pass that makes the copy plain for a general reader. -8. **Integration**, in its own Luna session with `$stack127-tool-content-integration`, once every planned catalog exists. It wires the route and content, makes the card art, publishes to development, and runs the full checks. Read the rendered tool and catalog pages yourself, and send copy problems back to the planning session. -9. **Audit**, with a fresh Sol worker and `$stack127-tool-audit`. Route each defect to its owner, and recheck only what changed. -10. **Report**: the spec, the Tailscale preview URL, what the tool does, and the audit verdict. - -The tool is done when its examples are right, the real page works at desktop and mobile width, card art and catalogs are integrated, the publish manifest runs clean in development, and the audit has no blocker. - -If release is already authorized, run `$stack127-release-e2e`. Otherwise stop at the development preview and ask once. diff --git a/skills/stack127/tools/stack127-tool-orchestrator/agents/openai.yaml b/skills/stack127/tools/stack127-tool-orchestrator/agents/openai.yaml deleted file mode 100644 index 4d89660a..00000000 --- a/skills/stack127/tools/stack127-tool-orchestrator/agents/openai.yaml +++ /dev/null @@ -1,4 +0,0 @@ -interface: - display_name: "stack127 Tool Orchestrator" - short_description: "Build and write a tool through final audit" - default_prompt: "Use $stack127-tool-orchestrator to research, plan, build, write, integrate, and audit this tool. Give me its complete spec and verified development preview. Release it only when authorized." diff --git a/skills/stack127/tools/stack127-tool-orchestrator/references/research-template.md b/skills/stack127/tools/stack127-tool-orchestrator/references/research-template.md deleted file mode 100644 index 66c054a6..00000000 --- a/skills/stack127/tools/stack127-tool-orchestrator/references/research-template.md +++ /dev/null @@ -1,116 +0,0 @@ -# Research: - -Route: `/` -Checked: -Competitors used: - -## Who uses it - -Who searches for this tool, and what they want to know. Base it on search results, "People also ask", competitor pages, and forums. Name the main group first. - -| Group | Rough share | What they already know | Their questions, in their words | -| --- | --- | --- | --- | -| Most people, such as a founder with one number from Stripe | Most | | | -| Pros, such as a growth lead with cohort data | Few | | | - -Then answer in a few lines: - -- What do most people want in the first few seconds? -- Which inputs can most people give offhand, and which need digging or a specialist? -- What do pros need that most people would skip? - -## Published comparison data - -Published ranges people use to judge their number, if any exist. Write "None" for tools where no comparison makes sense, such as most lookups. - -| Figure | Source and date | Who was measured | Same definition as the tool? | -| --- | --- | --- | --- | -| | | | | - -Say whether the sources agree closely enough to show one range in the tool, and which one. If they don't, say so. - -## Scope - -What job this tool covers and what it leaves out. List the search queries you tried and the domains that keep showing up. - -## Search intent - -| Query | What the searcher wants | Answer they need | What current results miss | -| --- | --- | --- | --- | -| | | | | - -Add the "People also ask" questions and related searches that matter. Note which ones no top result answers well. - -### Search words - -How the top results title themselves. See "Find the words first" in `stack127_docs/writing-style.md`. - -- Main phrase: -- Words top titles add, such as free, online, list, vs, the year, or a count: -- What top titles promise and the pages don't deliver: - -## User problems - -| Problem people repeat | Evidence link | What it means for the tool | -| --- | --- | --- | -| | | | - -Use real complaints and questions from forums, Reddit, communities, support threads, and reviews. Link each one. - -## Facts to get right - -| Fact | Primary source | How the tool should treat it | -| --- | --- | --- | -| | | | - -Formulas, standards, limits, units, thresholds, data dates, and security facts. Use official docs or source code. Mark anything unverified as unknown. - -## Competitor reviews - -Use each competitor for real. Try one correct example, one edge case, and one wrong input. Mark each note: - -- **Observed**: you saw it while using the tool. -- **Documented**: the competitor or an official source says it. -- **Inferred**: your reasonable guess. Say why. -- **Unknown**: you could not confirm it. - -### 1. - -URL: - -- [Observed] What it asks for and what it shows first. -- [Observed] What happened with the example, edge case, and wrong input. -- [Documented] Rules or data sources it states. -- [Inferred] Where a user gets stuck or misled. -- [Unknown] What you could not check. - -```text -input -> input -> result -``` - -Repeat for 5 to 8 competitors. Include the official tool if one exists, the top search results, and any tool people recommend in communities. - -## Comparison - -| Feature or answer | Competitor 1 | Competitor 2 | Competitor 3 | Competitor 4 | Competitor 5 | What stack127 should do | -| --- | --- | --- | --- | --- | --- | --- | -| | | | | | | | - -## Where competitors disagree - -Formulas, definitions, data dates, or scope choices that give different answers. Say which one is right and why, with the source. - -## How stack127 can win - -- What the searcher needs that no top result gives. -- Mistakes competitors make that we will avoid. -- Questions the page must answer to be the most useful result. -- Content angles competitors skip, such as worked examples, edge cases, honest limits, and dated sources. - -## Blockers - -Paid APIs, maintained datasets, accounts, background jobs, or anything else that needs approval. Write "None" if there are none. - -## Sources - -- [Name](link), checked . diff --git a/skills/stack127/tools/stack127-tool-orchestrator/references/tool-spec-template.md b/skills/stack127/tools/stack127-tool-orchestrator/references/tool-spec-template.md deleted file mode 100644 index 90f53d0a..00000000 --- a/skills/stack127/tools/stack127-tool-orchestrator/references/tool-spec-template.md +++ /dev/null @@ -1,107 +0,0 @@ -# - -Route: `/` - -Research: [research.md](research.md) - -Opus starts this file from the research. Link to research instead of copying it. - -## People and questions - -Take a position from the research's "Who uses it" section. Write it as decisions, not a survey: - -- Most users are: . They come with: . -- Their top questions: <2 or 3, in their words>. -- Basic answers them with: . -- Advanced holds: , for , because . Cover what serious competitors offer and what the old tool did, if there was one. -- Left out: , because . - -## Why people will choose this tool - -What the searcher is really trying to decide. Where the top results fail them. The specific things this tool does better, such as a clearer answer, honest unknowns, edge cases handled, worked examples, or dated sources. Keep it to a short list the builders and writer can check against. - -## Product - -### Promise and scope - -Define the primary user, main job, delivered answer, launch scope, and exclusions. - -### Technical contract - -Define inputs, parsing, units, bounds, formulas or source precedence, rounding, output, invalid states, unknowns, partial results, privacy, and security. - -### Backend contract - -The exact handoff between Sol's backend and Opus's frontend. List each exported function or API route with its file path, inputs and types, output shape, errors and unknown values, and timeouts or caching. Name any data script, migration, or dataset. The frontend calls the backend only through this contract. - -### Known examples - -Add a small set of independently calculated normal, boundary, and invalid examples. - -### Ownership - -List the backend files Sol builds (engine, API routes, scripts, focused test, preview row) the interface files Opus builds (components and styles), and what integration adds (route page, content wiring, card art). - -### Catalog placement - -Name the primary tool catalog and any secondary catalogs in rank order. Explain the reader task that makes each placement useful. If no suitable catalog exists, flag the new catalog for the main agent to plan before integration. Do not substitute a loosely related catalog just to fill this field. - -For a new tool, brief its catalog `toolSpot` marker art: one visual takeaway, a recognizable focal subject, at most one supporting object or relationship, and the intended semantic tone. Give it a tool-specific art key. The drawing has no visible words and must read at card size in both themes. This is card art, separate from optional figures in the tool article. - -## Interface - -### Flow - -State the user question, the lead answer, the example values the tool opens with, and the button's name. - -### Inputs - -| Input | Basic or Advanced | Required or optional | Hint, one sentence or none | What it changes in the result | -| --- | --- | --- | --- | --- | -| | | | | | - -Every Advanced input is optional. Name the Advanced disclosure for what's inside. If an input changes nothing in the result, cut it. - -### Result - -The answer, the visual that shows it, the few supporting numbers, and share or copy actions. Everything in the result comes from the person's inputs. Say what comparison shows, if any, and which published range it uses. No grade words. - -### Components - -List every existing shared component the frontend uses, with its import path. List any new or improved shared components built during planning, with what each one is for. List the tool-specific components the frontend will build, with a short description. - -### Layout - -How the inputs group into rows, where Advanced sits, and how the result reads at desktop and on phones: what the eye lands on first, and where the smaller numbers and detail sit. - -### States - -The example it opens with, stale results after an edit, invalid input, and how each domain limit answers instead of blanking. Add any other state this tool can really hit. - -## Content - -The planning session fills this section, after the frontend, with `skills/stack127/tools/stack127-tool-writing/SKILL.md`. Page copy uses existing components only. - -### Search intent and title - -The main query and search words from `research.md`, what the searcher wants, the visible title, and the SEO title and description direction. Follow "Titles and search" in `stack127_docs/writing-style.md`. - -### Reader questions - -The questions the page must answer, from research. For each, say where it is answered: the tool result, intro, usage, or content. - -### Outline - -Plan each part from the Page structure section of `skills/stack127/tools/stack127-tool-writing/SKILL.md`. The intro, usage, and content become the route's `content/intro.mdx`, `content/usage.mdx`, and `content/article.mdx`: - -- Intro: what the reader gets, who it is for, what they need ready. -- Usage: only the steps that need explaining, how to read the result, and one worked example. -- Content: question headings in order, what each answers, and the format for each (table, list, chart, example, formula, note, warning, or marker art) from `stack127_docs/writing-style.md`. - -### Facts, limits, and sources - -Which facts the page states, their sources, and any data date. Claims the writer must avoid because the tool does not support them. - -### Next step - -Related stack127 tools or pages to link, and why. diff --git a/skills/stack127/tools/stack127-tool-product-plan/SKILL.md b/skills/stack127/tools/stack127-tool-product-plan/SKILL.md deleted file mode 100644 index 7fb29791..00000000 --- a/skills/stack127/tools/stack127-tool-product-plan/SKILL.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -name: stack127-tool-product-plan -description: Start a stack127 tool-spec.md from research.md and write who the tool serves, why people will choose it, and its concrete product and technical contract, without implementing it. ---- - -# stack127 tool product plan - -Opus runs this in the planning session, then continues with `$stack127-tool-interface-plan`. - -Read `content_docs//research.md` and `stack127_docs/tool-interface.md`. Create or continue `content_docs//tool-spec.md` from `skills/stack127/tools/stack127-tool-orchestrator/references/tool-spec-template.md`. - -## Decide who it's for - -Write "People and questions" first. Everything else follows from it. Take a position, the way a good product lead would: - -- Who most users are, and the 2 or 3 questions they bring. -- What Basic answers, with the fewest inputs those people know offhand. -- What Advanced holds, for whom, and why. This is where the depth lives: everything a pro would expect from a serious tool in this space, from the research's competitors and forum questions, and everything the old tool did if there was one. Every Advanced input is optional, so say what empty means, such as "no discount entered: use the list price." -- What you're leaving out, with a reason a user would agree with. "Pros can use another tool" isn't one. -- The realistic example values the tool opens with, and whether a published comparison fits. -- The domain's real limits, such as a platform's maximum or minimum, and how the result answers when someone hits one. - -Then write "Why people will choose this tool": where the top results fail these people, and what this tool does better. Don't copy a competitor's layout or add features because others have them. - -## Write the contract - -Make it concrete enough that Sol and the frontend can each build to it without guessing: - -- Scope and exclusions. -- Inputs with units, bounds, and parsing. Formulas or source precedence, rounding, and output. -- Invalid, unknown, partial, and failure behavior. -- The backend contract: each exported function or API route, with its path, inputs, output shape, and errors. -- A few independently calculated examples for the backend test. -- Which files Sol builds and which Opus builds. -- Catalog placement, and a `toolSpot` card art brief. See the template. - -For a rework, update "People and questions" from the new research and list the engine changes Sol must make. Keep what's still right. - -Don't write code, tests, IDs, or validators. diff --git a/skills/stack127/tools/stack127-tool-product-plan/agents/openai.yaml b/skills/stack127/tools/stack127-tool-product-plan/agents/openai.yaml deleted file mode 100644 index 35d171d8..00000000 --- a/skills/stack127/tools/stack127-tool-product-plan/agents/openai.yaml +++ /dev/null @@ -1,4 +0,0 @@ -interface: - display_name: "stack127 Tool Product Plan" - short_description: "Turn tool research into a build contract" - default_prompt: "Use $stack127-tool-product-plan to write the concise product and technical contract for this tool in tool-spec.md." diff --git a/skills/stack127/tools/stack127-tool-research/SKILL.md b/skills/stack127/tools/stack127-tool-research/SKILL.md deleted file mode 100644 index 6df5925f..00000000 --- a/skills/stack127/tools/stack127-tool-research/SKILL.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: stack127-tool-research -description: Research one stack127 tool in depth, find who uses it and what they ask, use competitors for real, check search intent and user problems, verify facts with primary sources, and write content_docs//research.md. ---- - -# stack127 tool research - -Write `content_docs//research.md` from `skills/stack127/tools/stack127-tool-orchestrator/references/research-template.md`. The planner builds the tool from it, so give them what they need to decide well. - -1. **Start with the people.** Who searches for this, what do they already know, and what do they want answered in the first few seconds? Find out from search results, "People also ask", competitor pages, and forum threads, not guesses. Say which inputs most people can give offhand and which need digging. -2. **Find published comparison data**, if any: figures people use to judge their own number, with source, date, who was measured, and whether it measures the same thing. Say whether the sources agree well enough to show one range. -3. **Use 5 to 8 competitors for real**: the official tool, the top results, and tools people recommend. Try a correct example, an edge case, and a wrong input on each. Note what they get right, where people get stuck, and the options the serious ones offer that pros rely on. Those become Advanced. -4. **Verify the facts** that drive answers (formulas, limits, units, data dates) with official docs or source code, including the domain's hard limits, such as a platform's maximum. Mark anything unverified as unknown. -5. **Say how stack127 can win**, concretely, and flag anything that needs approval, such as paid APIs or maintained datasets. - -For a headless browser, see `skills/stack127/references/homelab-browser-and-search.md`. - -For a rework of an existing tool, add only "Who uses it" and "Published comparison data" to the existing file. If an older tool has no `research.md`, create one with those two sections and link the older docs in its folder. - -Don't plan the interface, write page copy, or write code. Return the file path and any blocker. diff --git a/skills/stack127/tools/stack127-tool-research/agents/openai.yaml b/skills/stack127/tools/stack127-tool-research/agents/openai.yaml deleted file mode 100644 index 929eeb9c..00000000 --- a/skills/stack127/tools/stack127-tool-research/agents/openai.yaml +++ /dev/null @@ -1,4 +0,0 @@ -interface: - display_name: "stack127 Tool Research" - short_description: "Research one stack127 tool page deeply" - default_prompt: "Use $stack127-tool-research to operate relevant competitors, verify technical facts, and write research.md." diff --git a/skills/stack127/tools/stack127-tool-writing/SKILL.md b/skills/stack127/tools/stack127-tool-writing/SKILL.md deleted file mode 100644 index 07b4185d..00000000 --- a/skills/stack127/tools/stack127-tool-writing/SKILL.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -name: stack127-tool-writing -description: Plan and write, or rewrite, the content, title, page copy, interface words, and SEO text for a stack127 tool page so anyone can follow it. Use for new tools and for simplifying or rewriting live tool pages. ---- - -# stack127 tool writing - -You're writing for one person: someone who just searched for this tool because something is bugging them. Talk to them like a friend who knows the subject. Get what they're stuck on, explain it simply, and clear up every doubt they'd still have. Then stop. - -Before you write, read the research and spec, and use the finished tool with a real example. Think about this person. What's going on for them? What are they trying to decide? What would they still wonder after seeing the answer? Read the intros of two or three other tools in the same catalog, so this page sounds like its own and not like theirs. - -Read "Search words" in `research.md`. If it's missing or older than the live results, search the main phrase and add it, following "Find the words first" in `writing-style.md`. The title, H1, description, intro, and question headings use those words. - -Read `stack127_docs/writing-style.md` for the voice and `stack127_docs/page-content.md` for the files and MDX blocks. Check every claim against the tool and its sources. - -## The page - -| Part | Lives in | Its job | -| --- | --- | --- | -| Intro | `content/intro.mdx` | Meet the reader where they are, hook them with their own problem, and point them to the tool. Follow "Intros" in `writing-style.md`. | -| Usage | `content/usage.mdx` | Walk a new user through the tool as if you're sitting beside them: what each input means, what to try, and how to read the result. A conversation, not a glossary. | -| Content | `content/article.mdx` | What helps them next. Mention related stack127 tools where they naturally come up, linked inside the sentence, never as a list. Leave out anything this reader doesn't need. Published figures and their sources go here, never in the result. Never call a number good or bad. | -| Interface words | Frontend code | Labels and one-sentence hints. See "Words inside a tool" in `writing-style.md`. | -| Title, SEO title, description, card copy | Database, through the publisher | The tool word people search, "free" when it is, and the answer it gives. Follow "Titles and search" in `writing-style.md`. | - -In the pipeline, the Opus session that planned the tool writes its page, after planning the spec's Content section. Use this skill for rewrites of live tool pages too, editing the route's MDX directly, and for catalog pages such as `/dns-tools`, whose content lives in `app/(site)/(catalogs)/[slug]/content/`. - -## Hand off - -Run `node scripts/stack127/content/check-mdx.mjs`. In the pipeline, apply interface word changes in the frontend code yourself. For a standalone rewrite, list them instead. - -Before handing off, read the title and intro out loud. If they sound like a label or a spec sheet, rewrite them. - -Return the MDX paths with word counts, the search words you targeted, the title, SEO title and description, the card name and description, the interface words, and sources for factual claims. - -Content edits leave `tool_version` and the public date alone. See `stack127_docs/tool-pages.md`. diff --git a/skills/stack127/tools/stack127-tool-writing/agents/openai.yaml b/skills/stack127/tools/stack127-tool-writing/agents/openai.yaml deleted file mode 100644 index f5e8257d..00000000 --- a/skills/stack127/tools/stack127-tool-writing/agents/openai.yaml +++ /dev/null @@ -1,4 +0,0 @@ -interface: - display_name: "stack127 Tool Writing" - short_description: "Write tool copy using the shared writing guide" - default_prompt: "Use $stack127-tool-writing to draft this finished tool's page copy and SEO text from its ready spec and stack127_docs/writing-style.md." diff --git a/stack127_docs/repo-structure.md b/stack127_docs/repo-structure.md index 6191a160..09d80854 100644 --- a/stack127_docs/repo-structure.md +++ b/stack127_docs/repo-structure.md @@ -86,14 +86,14 @@ Repo-owned Codex skills live in `skills/`: ```text skills/self-host-apps// -skills/stack127/tools// +skills/stack127// ``` For example: ```text skills/self-host-apps/enrichment/ -skills/stack127/tools/stack127-tool-backend/ +skills/stack127/stack127-tool-page/ ``` Sitewide skills live in `skills/stack127//`. diff --git a/stack127_docs/shared-ui.md b/stack127_docs/shared-ui.md index 48f3b350..f189804c 100644 --- a/stack127_docs/shared-ui.md +++ b/stack127_docs/shared-ui.md @@ -58,7 +58,7 @@ Show each look once. When a thin wrapper renders the same thing as another compo - Use the existing component when its behavior fits. - Page copy and content pages use existing components only. -- New or extended shared components come from the Opus planning step for a tool, when more than one page type needs them. +- New or extended shared components come from a tool's build step, when more than one page type needs them. - Keep calculations, data sources, and unusual interactions with the page or tool that owns them. - Static displays go in server-renderable modules. Interactive controls go in client modules. diff --git a/stack127_docs/tool-catalogs.md b/stack127_docs/tool-catalogs.md index ef41bbb2..e011c618 100644 --- a/stack127_docs/tool-catalogs.md +++ b/stack127_docs/tool-catalogs.md @@ -21,7 +21,7 @@ Keep each published catalog populated with at least one published tool. ## Page copy -Catalogs share one route, `app/(site)/(catalogs)/[slug]/page.tsx`. Each catalog's intro and article live in `content//intro.mdx` and `content//article.mdx` under that route, as [page-content.md](page-content.md) describes. Use the [tool writing skill](../skills/stack127/tools/stack127-tool-writing/SKILL.md) to write them. +Catalogs share one route, `app/(site)/(catalogs)/[slug]/page.tsx`. Each catalog's intro and article live in `content//intro.mdx` and `content//article.mdx` under that route, as [page-content.md](page-content.md) describes. Use the [tool copywriting skill](../skills/stack127/stack127-tool-copywriting/SKILL.md) to write them. `title` must be trimmed, nonempty text. The intro and article live in MDX, and the database has no catalog content columns. @@ -69,7 +69,7 @@ Each step has an owner: | --- | --- | | Name the primary catalog, any secondary catalogs, and a specific card art brief | Product plan | | Generate and register the drawing | Integration worker | -| Write one card name and description, shared across catalogs | Opus planning session, in its writing step | +| Write one card name and description, shared across catalogs | The agent running the tool page, in its copy step | | Apply the card fields and memberships to development together | Integration worker | The integration worker runs: diff --git a/stack127_docs/tool-interface.md b/stack127_docs/tool-interface.md index 1eddd7fe..ae26b8e1 100644 --- a/stack127_docs/tool-interface.md +++ b/stack127_docs/tool-interface.md @@ -131,7 +131,7 @@ Use the shared components in `app/ui/` and the `/components-ui` gallery. When no ## Plan before you build -New tools and major redesigns need the Interface section of `content_docs//tool-spec.md` first, from `skills/stack127/tools/stack127-tool-interface-plan/SKILL.md`. Small fixes that don't change inputs, results, or layout can skip it. +New tools and major redesigns need an agreed plan in `content_docs//tool-spec.md` first, from `skills/stack127/stack127-tool-page/SKILL.md`. Small fixes that don't change inputs, results, or layout can skip it. ## Review diff --git a/stack127_docs/tool-pipeline.md b/stack127_docs/tool-pipeline.md deleted file mode 100644 index 228578cd..00000000 --- a/stack127_docs/tool-pipeline.md +++ /dev/null @@ -1,194 +0,0 @@ -# Tool pipeline - -The main agent starts each round, checks each handoff, and doesn't repeat finished work. - -Research lives in `content_docs//research.md`. The plan lives in `content_docs//tool-spec.md`. - -The pipeline runs from a working tool through writing, development integration, and an independent audit. There's no manual pause for writing. You don't need an acceptance receipt, hashes, evidence folder, ownership manifest, or stage validator. - -## Order and models - -Lanes and models follow "Agent roles" in `AGENTS.md`. The main agent is the coordinator, whether it's Claude Code or Codex. It starts each round with T3's `delegate_task`, unless the round is in its own lane, so the user can watch each worker. - -| Round | Work | Lane | Effort | Output | -| --- | --- | --- | --- | --- | -| 1 | Who uses the tool, deep research, and competitor review | Luna | `max` | `research.md` | -| 2 | Product, interface, and component plan | Opus, planning session | `medium` | New `tool-spec.md` with why people will choose it, Product with backend contract, Interface, catalog placement, card art brief, and new or improved shared components | -| 3 | Backend build | Sol | `high`, or `xhigh` for risky logic | Engine, API routes, data scripts, development preview row, and focused correctness test. No UI. | -| 4 | Interface build | Opus, same planning session | `high` | Tool components, styles, and every word in them | -| 5 | Content plan and writing | Opus, same planning session | `medium` | Content section, title, the route's `content/*.mdx` files, interface words, SEO text, and catalog card copy | -| 6 | Integration | Luna, its own session | `xhigh` | Route and content wiring, card art, publish manifest, development page, catalog memberships, and the full desktop and mobile checks | -| 7 | Independent audit | Sol | `high` | Release verdict and defects routed to their owner | - -Sol builds the backend. The Opus planning session plans the tool, designs and builds what people see, and writes every word. Integration connects it all and checks it. - -Workers don't delegate. Start each worker without unrelated conversation context. - -Once the Content section and copy are ready, pass the draft to integration. Don't wait for copy from the user. - -## Pace - -The homelab hardware is limited, so go slow unless the user asks for speed. Work on one tool at a time, with no more than one or two agents running at once. Take a tool through its audit before starting the next. Work that several tools share, such as one engine they all use, can be built once up front. - -When the user asks to go fast, tools can run in parallel, but browser checks still run one at a time. - -## Sessions - -Each round's worker keeps its session, so follow-ups go back to the worker that did the work. - -`delegate_task` returns a `childThreadId`. Send follow-ups to that thread with `t3_thread_send`, wait for them with `t3_thread_wait`, then read the reply with `task_status`. - -Planning, interface, and writing share one Opus session. The session that plans the tool writes every word in it and on its page, so labels, hints, and content agree. That session works on one tool only, so all its attention goes to that tool's users and searchers. Never give it a second tool, and never give it integration work: route wiring, card art, publishing, and check runs make it mechanical. - -Research, backend, integration, and audit workers usually get one tool each too. The main agent can share one across tools when the work is small and alike. The independent audit gives the fresh read. Keep the thread IDs until the audit passes. - -The prompt names the skill files to follow, the tool, route, spec path, allowed files, and stop condition. - -If a worker is unavailable or fails, stop and report it. Don't fall back to another lane. - -## Main agent's job - -For each round: - -1. Start the assigned skill with the tool, route, repo, spec path, allowed files, and stop condition. -2. Read the result and the relevant diff. -3. Send specific missing or wrong work back to the same worker or Claude Code session. -4. Start the next round when the output is usable. - -After planning, read the spec against the research. Check that the plan: - -- Takes a clear position on who most users are and their top 2 or 3 questions. Send back a spec that treats every input as equally important. -- Answers those questions in Basic with the fewest inputs most people know offhand. -- Keeps every Advanced field optional, and gives each one a reason and an audience. -- Opens on realistic example values with their result, and names the button for the result. -- Keeps the depth pros need in Advanced, and drops no capability the research or the old tool had without a reason. -- Shows a published comparison only where the research found matching data, and never grades. -- Answers what searchers need. -- Beats the competitors in specific ways. -- Names the components to use. -- Has a backend contract precise enough for two builders to meet in the middle. -- Is clear enough to build without guessing. - -Route each problem to its owner: - -| Problem | Goes to | -| --- | --- | -| Suggestions, planning gaps, missing component work, weak product decisions | Planning session | -| Contract gaps | Planning session | -| Design, layout, and interaction problems | Planning session, at high effort | -| Backend defects and wrong answers | Sol | -| Data, wiring, and card art bugs | Integration session | -| Copy problems | Planning session | - -Sol builds the backend to the contract. If the contract has gaps, Sol reports them instead of redesigning. - -### Checking the writing - -Send factual fixes and missing copy back to the planning session first. Then ask it to make the full page copy easier for a general reader to follow. - -The rewrite keeps every useful detail and qualification. It explains hard ideas plainly, with a short example where it helps, without dragging the page out. Check the revised draft before integration. - -After integration, read the rendered page from start to finish. Every sentence should make sense as public copy. - -Send these back to the planning session, then reintegrate and check the affected copy: - -- Stray research notes or source labels. -- Insider wording. -- Unclear sentences. -- Lost detail. - -Keep useful source links in the page. Research notes and citation markers belong only in the handoff. - -### What the main agent doesn't redo - -The main agent doesn't rerun research or repeat browser work. It checks the tool and runs the core tests. Pull request CI runs the build. - -If integration or audit later changes code, rerun only the checks that change affects. - -## Research and tool spec - -| For | Use | -| --- | --- | -| How to write, formats, and search wording | `stack127_docs/writing-style.md` | -| Components and their syntax | [shared-ui.md](shared-ui.md) | -| Everything specific to tool pages | The tool writing skill | - -Page copy uses existing components only. - -Luna writes `research.md` from `skills/stack127/tools/stack127-tool-orchestrator/references/research-template.md`. It starts with who uses the tool and the questions they bring. Then it records scope, search intent, user problems, verified facts, published comparison data, 5 to 8 competitor reviews, a comparison table, disagreements, how stack127 can win, blockers, and sources. - -Opus starts `tool-spec.md` from `skills/stack127/tools/stack127-tool-orchestrator/references/tool-spec-template.md`. The spec links to the research instead of copying it. - -After the interface, the same Opus session completes the Content section, then drafts from the finished spec and the actual tool. - -| Spec section | Records | -| --- | --- | -| People and questions | Who most users are and their top questions, what Basic answers, what Advanced holds and for whom, and what's left out and why. A position, with reasons. | -| Why people will choose this tool | What the searcher is trying to decide, where top results fail, and what this tool does better. | -| Product | The job, scope, technical contract, important states, and independently known examples. | -| Product: catalogs and card art | One primary catalog and any secondary catalogs, in rank order, each with a reason based on the reader's task. One visual takeaway, focal subject, and supporting relationship for the new card's `toolSpot` marker drawing. A missing catalog is a separate catalog page task for the main agent. | -| Interface | Basic and Advanced inputs with their hints, when the result shows, the visual result, any comparison, controls, result order, components, states, accessibility, and responsive behavior. It names the existing shared components the frontend uses and the new or improved shared components the planner built. | -| Content | Search intent and title, reader questions and where each is answered, the intro, usage, and content outline, facts and limits, and next steps. | - -Keep the spec short. Add detail only when it changes the product or prevents a wrong answer. Don't create IDs, fingerprints, duplicate contracts, or status machinery. - -## Verification - -| Step | Check | -| --- | --- | -| Calculation, parser, and resolution logic | A small focused unit test with independent examples. | -| Planner | Each new or changed shared component in the `/components-ui` gallery and on the page types that already use it, at desktop and mobile width in both themes. | -| Backend | One focused test, plus a direct check of one correct and one invalid example. | -| Interface | The planning session looks at the real page at desktop and mobile width as a first-time visitor. | -| Integration | The actual page and its catalogs at desktop and mobile width in both themes, with one correct and one invalid example. | - -Integration also makes the card art. It uses `$marker-art-draw` to create a spec-backed `toolSpot`, generates its SVG and TypeScript export, and registers a tool-specific key in `lib/card-art.ts` before the main build. The drawing must be recognizable at card size. A generic icon isn't finished art for a new tool. - -When the in-app browser isn't available over SSH, use the local headless browser in `skills/stack127/references/homelab-browser-and-search.md`. That applies to these checks and the later audit. - -A new database-backed route needs reviewed development rows to render. Use the publisher for its title, search metadata, cards, catalog memberships, and version. Page words live in MDX. Do not fill retired Markdown fields or use old placeholder preview scripts. - -After the backend and frontend are both done, the main agent runs `npm run quality`. The full build runs in pull request CI on GitHub when the user asks to push to prod. Don't build on the homelab. - -Writing hands integration its final plain-language title, SEO text, interface words, catalog card name and description, and the page content as MDX files in the route's `content/` folder. See [page-content.md](page-content.md). The spec holds the plan, not the page content. - -Before integration, the main agent confirms every planned catalog exists. A new catalog needs its own registry row, content, art, and page review. - -Integration wires the MDX files into the route and runs the content check. It then writes one publish manifest for the tool, as [page-publishing.md](page-publishing.md) describes. It holds the registry fields, title, the content fields the publisher still requires, card fields, tool-specific art key, full ordered catalog list, and readiness requirements. A new catalog the tool needs goes in the same manifest. Integration then works in development: - -1. With the dev server and local cache watcher running, run the tools publisher's `prepare`, `preview`, and `apply` against development. `apply` also checks the public page. -2. Check the actual tool and each assigned catalog card at desktop and mobile width in both themes. -3. Run a new build only if integration or audit changes route, runtime, or SEO code. - -Content fixes after integration edit the MDX files. Title, search text, and card fixes update the manifest, then run the publisher in development again. That keeps the manifest ready for production. The single-purpose tool-page commands are fine for a quick development check, but the manifest must end with the same values. - -The auditor checks accuracy, content, catalog cards and placement, and the common user flow. That includes whether the new tool's marker drawing reads clearly at its rendered size in both themes. - -The auditor reports each defect with its owner: backend, data, wiring, design, or copy. The main agent sends each one to Sol, the integration session, or the planning session, then reruns only the affected checks. - -Don't run a full-site browser suite for one tool. - -## Rework an existing tool - -Use this path when a live tool breaks the rules in [tool-interface.md](tool-interface.md), such as too many required inputs, text under fields, checkbox reveals, or sources in the result. The engine's math stays right. What changes is who the tool serves first and how it shows the answer. - -| Round | Work | Lane | Output | -| --- | --- | --- | --- | -| 1 | Add "Who uses it" and "Published comparison data" to the existing `research.md`. Don't redo the rest. | Luna, `xhigh` | Updated `research.md` | -| 2 | Rewrite People and questions, then the Interface section. List the engine changes needed, such as making a required field optional. | Opus planning session, `medium` | Updated `tool-spec.md` | -| 3 | Engine changes and their focused test, only if round 2 needs any. | Sol, `high` | Engine and test | -| 4 | Rebuild the interface with `$stack127-tool-frontend`. | Opus planning session, `high` | Tool component and styles | -| 5 | Update the page content with `$stack127-tool-writing`. Move anything cut from the tool into it. Put the published figures and sources in the article. | Opus planning session, `medium` | Updated `content/*.mdx` and interface words | -| 6 | Independent audit. | Sol, `high` | Release verdict | - -A rework changes inputs and results, so it's a minor `tool_version` increase. Delete older planning docs in `content_docs//` that the new spec replaces, such as `brief.md` or `interface-contract.md`. Work through the list one tool at a time, as "Pace" describes. Give each tool its own Opus planning session, and sync with main before you start. - -## Publication and release - -You can publish a development preview inside an authorized tool pipeline, so the real database-backed route can be reviewed. Memberships can be set up before publication. Catalog cards appear only for published tools. - -After the audit, give the user the complete spec, the verified development preview, the publish manifest location, and the release verdict. Production data, commits, pushes, and deployment still need authorization. - -When release is authorized, follow `$stack127-release-e2e`. The code ships first: pull request, CI, merge, and the release workflow, which builds one image, deploys it, and checks the live revision and core public endpoints. Then the coordinator publishes the tool's production data with the tools publisher and its page publication workflow, as [page-publishing.md](page-publishing.md) describes. "Push to prod" covers both steps. - -The coordinator does the release, or names the reviewed commit or exact production data changes in a worker's task, as described in `AGENTS.md`. Ordinary pipeline workers may apply development updates without that. diff --git a/stack127_docs/writing-style.md b/stack127_docs/writing-style.md index 994faa3c..31bb5c58 100644 --- a/stack127_docs/writing-style.md +++ b/stack127_docs/writing-style.md @@ -4,7 +4,7 @@ Talk like a friend explaining something to another friend, whatever the situatio Conversational, but not chatty. Talk to the reader in full sentences, with accurate facts. No jokes, no hype, no filler. Engaging doesn't mean longer; most pages should get shorter. -This guide covers how to write, which format to use, titles, intros, and search wording, for every page, doc, and chat. Where page content lives, and how to write each block in MDX, is in [page-content.md](page-content.md). Components are in [shared-ui.md](shared-ui.md). What goes on a tool page lives in `skills/stack127/tools/stack127-tool-writing/SKILL.md`. +This guide covers how to write, which format to use, titles, intros, and search wording, for every page, doc, and chat. Where page content lives, and how to write each block in MDX, is in [page-content.md](page-content.md). Components are in [shared-ui.md](shared-ui.md). What goes on a tool page lives in `skills/stack127/stack127-tool-copywriting/SKILL.md`. ## Show first @@ -36,7 +36,9 @@ Don't repeat a visual's values in the text. A caption gives the takeaway. Alt te - Talk to the reader as "you". Use contractions. - "I" or "we" is fine when it sounds natural. - Say each thing once. -- Cut anything the reader doesn't need. +- Cut anything the reader doesn't need. If they wouldn't miss a line, it goes. +- Stay on the page's topic. A page about every option doesn't get headings about one of them. +- Don't explain what the page already shows, such as a button's name or an example the tool opens with. ## Before and after diff --git a/tests/pages/ad-network-requirements-checker/engine.test.mjs b/tests/pages/ad-network-requirements-checker/engine.test.mjs new file mode 100644 index 00000000..3453680b --- /dev/null +++ b/tests/pages/ad-network-requirements-checker/engine.test.mjs @@ -0,0 +1,302 @@ +import assert from 'node:assert/strict'; +import test from 'node:test'; +import fs from 'node:fs'; +import vm from 'node:vm'; +import ts from 'typescript'; +import { validateRecommendationInput, recommendAdNetworks, parseRecommendationQuery, recommendationShareParams } from '../../../lib/ad-network-requirements/engine.ts'; +import { estimateMeasures } from '../../../lib/ad-network-requirements/estimate.ts'; +import { adNetworkProfiles } from '../../../lib/ad-network-requirements/profiles.ts'; +import { adNetworkNiches } from '../../../lib/ad-network-niches.ts'; + +const input = extra => ({ visitsUnit:'sessions', ...extra }); +const recommend = extra => recommendAdNetworks(input(extra),null); +const names = cards => cards.map(c=>c.slug); +const scenarios = [ + { title:'tiny food blog', input:{niche:'food',pageviews:3000,siteAge:'3to6m',tier1Share:60,current:'none'}, + rows:[['google-adsense',89.96,89.96,'no_minimum'],['journey-by-mediavine',54.10,57.10,'estimate']], + add:[['infolinks',77.28],['revcontent',73.42]],growth:['monumetric'],suggest:null }, + { title:'default 40k food blog', input:{niche:'food',pageviews:40000,visits:22000,siteAge:'gt12m',tier1Share:65,current:'google-adsense',adRevenueMonth:350}, + rows:[['monumetric',96.67,99.67,'estimate'],['raptive',88.72,91.72,'estimate'],['journey-by-mediavine',87,90,'estimate'],['newor-media',80.04,80.04,'no_minimum'],['she-media',69.81,63.81,'review_led']], + add:[['infolinks',77.28],['revcontent',74.70]],growth:['mediavine','clickio'],suggest:null }, + { title:'developer site', input:{niche:'tech',pageviews:60000,visits:35000,siteAge:'gt12m',tier1Share:55,current:'none'}, + rows:[['raptive',88.46,91.46,'estimate'],['monumetric',85.44,88.44,'estimate'],['journey-by-mediavine',75.39,78.39,'estimate'],['newor-media',76.90,76.90,'no_minimum'],['buysellads-carbon-ads',77.66,71.66,'review_led']], + add:[['ethicalads',76.24],['infolinks',77.28]],growth:['pubfuture','pubpower'],suggest:'adRevenueMonth' }, + { title:'gaming site', input:{niche:'gaming',pageviews:300000,visits:150000,siteAge:'gt12m',tier1Share:45,current:'google-adsense',adRevenueMonth:900}, + rows:[['clickio',87.71,93.71,'published_number'],['raptive',88.93,91.93,'estimate'],['publisher-collective',93.33,87.33,'review_led'],['pubfuture',81,87,'published_number'],['mediavine',83.82,86.82,'estimate']], + add:[['sovrn',82.80],['mgid',79.73]],growth:['monumetric','freestar'],suggest:null }, + { title:'high volume outside Tier 1', input:{niche:'education',pageviews:2000000,visits:1100000,siteAge:'gt12m',tier1Share:10,current:'google-adsense',adRevenueMonth:2500}, + rows:[['ezoic',90,93,'estimate'],['publisher-collective',96.67,90.67,'review_led'],['clickio',82.80,88.80,'published_number'],['monetizemore-pubguru',79.73,85.73,'published_number'],['pubfuture',74.52,80.52,'published_number']], + add:[['mgid',85.87],['sovrn',85.87]],setup:[['amazon-publisher-services',73.14],['sparteo',67.50]],growth:['the-moneytizer','she-media'],suggest:null }, + { title:'high revenue on Raptive', input:{niche:'food',pageviews:600000,visits:330000,siteAge:'gt12m',tier1Share:80,shares:{US:70},current:'raptive',adRevenueMonth:12000}, + rows:[['monetizemore-pubguru',93.33,99.33,'published_number'],['publift',92,98,'published_number'],['mediavine',93.33,96.33,'estimate'],['she-media',93.33,96.33,'estimate'],['clickio',85.87,91.87,'published_number']], + add:[['mgid',85.87],['sovrn',85.87]],setup:[['adpushup',64.40],['publir',64.40]],growth:['the-moneytizer','publisher-collective'],suggest:null }, + { title:'unknowns with one visits number', input:{niche:'lifestyle',visits:25000,visitsUnit:'visits'}, + rows:[['google-adsense',76.67,76.67,'no_minimum'],['newor-media',76.48,76.48,'no_minimum'],['monumetric',68.74,71.74,'estimate'],['raptive',60.32,63.32,'estimate'],['journey-by-mediavine',52.59,55.59,'estimate']], + add:[['infolinks',77.28],['revcontent',74.70]],growth:['pubfuture','pubpower'],suggest:'adRevenueMonth' }, + { title:'upgrading Journey', input:{niche:'food',pageviews:120000,visits:70000,siteAge:'gt12m',tier1Share:70,current:'journey-by-mediavine',adRevenueMonth:1100}, + rows:[['mediavine',98.33,109.33,'estimate'],['raptive',98.33,101.33,'estimate'],['she-media',98.33,101.33,'estimate'],['monumetric',91.78,94.78,'estimate'],['clickio',85.87,91.87,'published_number']], + add:[['infolinks',77.28],['revcontent',75.99]],growth:['publift','ezoic'],suggest:null }, + { title:'developer already on Carbon', input:{niche:'tech',pageviews:150000,visits:90000,siteAge:'gt12m',tier1Share:50,current:'buysellads-carbon-ads'}, + rows:[['raptive',90.47,93.47,'estimate'],['clickio',83,86,'estimate'],['monumetric',78.40,81.40,'estimate'],['newor-media',75.99,75.99,'no_minimum'],['journey-by-mediavine',72.98,75.98,'estimate']], + add:[],growth:['ezoic','publift'],suggest:'adRevenueMonth' }, +]; +for (const scenario of scenarios) test(`expected ranking: ${scenario.title}`,()=>{ + const result=recommend(scenario.input); + assert.deepEqual(result.main.map(c=>[c.slug,c.debug.score,c.debug.rank,c.debug.basis]),scenario.rows); + for(const c of [...result.main,...result.more.add,...result.more.setup])assert.equal(c.status,c.debug.basis!=='review_led'&&c.debug.score>=70?'good_fit':'worth_a_try'); + assert.deepEqual(result.lead,{kind:'apply',slug:scenario.rows[0][0],count:scenario.rows.length}); + assert.deepEqual(result.more.add.map(c=>[c.slug,c.debug.score]),scenario.add); + assert.deepEqual(result.more.setup.map(c=>[c.slug,c.debug.score]),scenario.setup??[]); + assert.deepEqual(names(result.more.growth),scenario.growth); + assert.equal(result.suggestInput,scenario.suggest); +}); + +const base={niche:'food',pageviews:40000,siteAge:'gt12m',tier1Share:60,current:'none'}; +const get=(slug,extra)=>recommendAdNetworks(input(extra),null,adNetworkProfiles.filter(p=>p.slug===slug || p.slug===extra.current)); +const only=(slug,extra)=>get(slug,extra).main[0]; +const close=(actual,expected,tolerance=1e-8)=>assert.ok(Math.abs(actual-expected){ + const x={niche:'lifestyle',pageviews:80000,siteAge:'gt12m',tier1Share:60,shares:{GB:50},current:'none'}; + assert.deepEqual(estimateMeasures(input(x)).usShare,{lo:0,hi:10,exact:false}); + const r=recommend(x); + assert.deepEqual(r.main.map(c=>[c.slug,c.debug.score]),[['raptive',96.15],['monumetric',92.87],['journey-by-mediavine',83.58],['newor-media',76.90],['google-adsense',70.53]]); + assert.deepEqual(names(r.more.growth),['pubfuture','she-media']);assert.equal(r.more.growth[1].bar.metric,'us_share'); +}); +test('R2: entered zero shares remain zero, including Moneytizer uniques',()=>{ + const x={niche:'lifestyle',visits:1000000,visitsUnit:'users',siteAge:'gt12m',shares:{US:0,GB:0,CA:0,AU:50,NZ:50},current:'none'}; + const m=estimateMeasures(input(x));assert.deepEqual(m.moneytizerShare,{lo:0,hi:0,exact:true});assert.equal(m.moneytizerUniques30d.lo,0);assert.equal(m.moneytizerUniques30d.hi,0); + const r=recommend(x);assert.deepEqual(names(r.main),['raptive','publift','monumetric','ezoic','clickio']);assert.deepEqual(names(r.more.setup),['monetizemore-pubguru','amazon-publisher-services']);assert.ok(!names(r.more.growth).includes('the-moneytizer')); +}); +test('R3/R4: choose Newor program on the lower bound before scoring',()=>{ + const x={niche:'sports',pageviews:100000,siteAge:'gt12m',tier1Share:70,current:'none'}; + const m=estimateMeasures(input(x));close(m.usPageviews.lo,38500);close(m.usPageviews.hi,63000); + assert.equal(only('newor-media',x).program,'Elevate');assert.equal(only('newor-media',x).debug.score,76.90); + const catapult=only('newor-media',{...x,shares:{US:62}});assert.equal(catapult.program,'Catapult');close(catapult.debug.S,0.8508333333333333);assert.equal(catapult.debug.basis,'published_number');assert.equal(catapult.debug.score,74.21);assert.equal(catapult.debug.rank,80.21); +}); +test('R5: Concert has no clear step up at low traffic',()=>{ + const r=recommend({niche:'news',pageviews:20000,siteAge:'gt12m',tier1Share:50,current:'concert'}); + assert.deepEqual(r.lead,{kind:'no_step_up',current:'concert'});assert.deepEqual(r.main,[]);assert.deepEqual(r.more.growth,[]);assert.deepEqual(names(r.more.add),['revcontent','infolinks']);assert.equal(r.suggestInput,'adRevenueMonth'); +}); +test('R6: current Newor means its lowest tier, not inferred Premier',()=>{ + const x={niche:'food',pageviews:150000,siteAge:'gt12m',tier1Share:70,current:'newor-media',adRevenueMonth:900}; + assert.deepEqual(names(recommend(x).main),['mediavine','raptive','she-media','monumetric','clickio']); + const journey=only('journey-by-mediavine',x);assert.equal(journey.debug.score,82.60);assert.equal(journey.debug.rank,85.60); +}); +test('R7: young site softens age without becoming a growth gate',()=>{ + const x={...base,siteAge:'3to6m'};const r=recommend(x); + assert.deepEqual(names(r.main),['monumetric','newor-media','google-adsense','journey-by-mediavine','she-media']); + assert.ok(!names(r.more.growth).includes('raptive'));assert.deepEqual(get('raptive',x).main,[]); + assert.equal(r.main.find(c=>c.slug==='journey-by-mediavine').debug.Aage,0.85); +}); +test('R8/R10: complete country splits normalize Tier 1 or reject mismatches',()=>{ + const raw={niche:'food',pageviews:'40000',siteAge:'gt12m',tier1Share:'55.4',shareUS:'40',shareGB:'8',shareCA:'4',shareAU:'3',shareNZ:'0'}; + const valid=validateRecommendationInput(raw);assert.equal(valid.ok,true);assert.equal(valid.input.tier1Share,55); + const m=estimateMeasures(valid.input);assert.deepEqual(m.monumetricShare,{lo:55,hi:55,exact:true}); + assert.equal(validateRecommendationInput({...raw,tier1Share:'65'}).errors.shareUS,'split_mismatch'); +}); +test('R9: niche alone produces a short useful list without revenue or traffic invention',()=>{ + const r=recommend({niche:'food'}); + assert.deepEqual(r.main.map(c=>[c.slug,c.debug.score,c.status]),[['google-adsense',85.87,'good_fit'],['newor-media',55.94,'worth_a_try'],['monumetric',47.29,'worth_a_try'],['journey-by-mediavine',45.60,'worth_a_try']]); + assert.equal(r.suggestInput,'adRevenueMonth');assert.equal(r.main[1].reason.code,'fit_estimate');assert.equal(estimateMeasures(input({niche:'food'})).adRevenueMonth,undefined); +}); +test('R11: real revenue opens premium routes at small traffic; pin and family removal both apply',()=>{ + const x={niche:'personal-finance',pageviews:8000,siteAge:'gt12m',tier1Share:70,current:'none',adRevenueMonth:6000};const r=recommend(x); + assert.deepEqual(r.main.map(c=>[c.slug,c.debug.score,c.debug.rank]),[['mediavine',94.44,97.44],['publift',89.96,95.96],['clickio',86.89,92.89],['monetizemore-pubguru',80.96,86.96],['google-adsense',80.76,80.76]]); + assert.deepEqual(r.more.setup.map(c=>[c.slug,c.debug.score]),[['adpushup',64.40],['adapex',61.77]]);assert.deepEqual(names(r.more.growth),['monumetric','raptive']); + const adsense=recommend({...x,current:'google-adsense'});assert.deepEqual(names(adsense.main),['mediavine','publift','clickio','monetizemore-pubguru','adpushup']);assert.deepEqual(names(adsense.more.setup),['adapex','anymind-anymanager']); + const journey=only('journey-by-mediavine',{...x,current:'google-adsense'});assert.equal(journey.debug.score,77.70);assert.equal(journey.debug.rank,80.70); +}); + +test('known traffic conversions retain measure identity and exactness',()=>{ + const sessions=estimateMeasures(input({niche:'food',visits:22000}));assert.deepEqual(sessions.pageviews,{lo:26400,hi:44000,exact:false}); + const pv=estimateMeasures(input({niche:'food',pageviews:40000}));assert.equal(pv.sessions.lo,20000);close(pv.sessions.hi,33333.333333333336);assert.equal(pv.visits.exact,false); + const users=estimateMeasures(input({niche:'food',visits:50000,visitsUnit:'users'}));close(users.sessions.lo,55555.555555555555);close(users.sessions.hi,83333.33333333333);assert.deepEqual(users.visitors,{lo:50000,hi:50000,exact:false});assert.deepEqual(users.monthlyActiveUsers,users.visitors); + const explicit=estimateMeasures(input({niche:'food',pageviews:1,visits:100}));assert.equal(explicit.pageviews.lo,1);assert.equal(explicit.sessions.lo,100); +}); +test('strict Sovrn visits preserve the source comparator and basis',()=>{ + const x={niche:'food',siteAge:'gt12m',tier1Share:60}; + assert.equal(get('sovrn',{...x,visits:100000,visitsUnit:'visits'}).more.add.length,0); + const exact=get('sovrn',{...x,visits:100001,visitsUnit:'visits'}).more.add[0];assert.equal(exact.debug.basis,'published_number');assert.equal(exact.reason.values.bar,100000);assert.equal(exact.detail.bars[0].comparator,'more_than'); + assert.equal(get('sovrn',{...x,visits:100001}).more.add[0].debug.basis,'estimate'); +}); +test('PubFuture 100k and Mediavine $420 boundaries use published growth bars',()=>{ + const x={niche:'gaming',pageviews:99999,siteAge:'gt12m',tier1Share:40,current:'none'};assert.equal(recommend(x).more.growth[0].slug,'pubfuture');const pub=recommend({...x,pageviews:100000}).main[2];assert.equal(pub.slug,'pubfuture');assert.equal(pub.debug.score,79); + const food={niche:'food',pageviews:120000,siteAge:'gt12m',tier1Share:70,current:'none',adRevenueMonth:419}; + const growth=recommend(food).more.growth[0];assert.equal(growth.slug,'mediavine');assert.equal(growth.bar.amount,5000);assert.equal(growth.bar.period,'previous_calendar_year'); + const med=recommend({...food,adRevenueMonth:420}).main[3];assert.equal(med.slug,'mediavine');assert.equal(med.debug.score,89.59);assert.equal(med.reason.code,'revenue_signal');assert.deepEqual(med.reason.values,{}); +}); +test('Monumetric interval intersection sharpens geography without inventing country shares',()=>{ + const x={...base,tier1Share:50};let m=estimateMeasures(input(x));assert.deepEqual(m.monumetricShare,{lo:47,hi:50,exact:false});assert.equal(only('monumetric',x).debug.G,0.7); + m=estimateMeasures(input({...x,shares:{US:40,GB:6,CA:3,AU:1}}));assert.deepEqual(m.monumetricShare,{lo:50,hi:50,exact:true});assert.equal(only('monumetric',{...x,shares:{US:40,GB:6,CA:3,AU:1}}).debug.G,1); +}); +test('family, specialists, current aliases and contract restrictions',()=>{ + const x={...base,pageviews:2000000,adRevenueMonth:12000}; + for(const current of ['mediavine','pubnation'])assert.ok(!recommend({...x,current}).main.some(c=>['mediavine','journey-by-mediavine'].includes(c.slug))); + assert.ok(!recommend({...x,current:'snigel'}).main.some(c=>c.slug==='publisher-collective')); + assert.deepEqual(recommend({...x,current:'buysellads-carbon-ads'}).more.add,[]); + for(const c of recommend({...x,current:'raptive'}).more.add){assert.equal(c.checkContract,true);assert.equal(c.reason.code,'check_contract');} + const other=recommend({...x,niche:'other'});for(const c of [...other.main,...other.more.add,...other.more.setup]){assert.equal(c.detail.peers,null);assert.ok(!['nitropay','venatus','snack-media','buysellads-carbon-ads','ethicalads'].includes(c.slug));} + assert.equal(recommend(scenarios[7].input).main[0].reason.code,'upgrade'); +}); +test('every calibration invariant holds across size, revenue, niche and current-network cases',()=>{ + for(const niche of [...adNetworkNiches.map(n=>n.slug),'other'])for(const pageviews of [0,3000,9999,40000,300000,3000000])for(const adRevenueMonth of [undefined,100,499,6000]){ + const x=input({niche,pageviews,adRevenueMonth,siteAge:'gt12m',tier1Share:60,current:'none'});const r=recommendAdNetworks(x,null); + assert.ok(r.main.length<=5);assert.ok(r.more.add.length<=2&&r.more.setup.length<=2&&r.more.growth.length<=2); + assert.ok(r.main.filter(c=>['mediavine','journey-by-mediavine'].includes(c.slug)).length<=1); + for(const c of [...r.main,...r.more.add,...r.more.setup]){assert.ok(c.reason.code);assert.ok(c.applyUrl.startsWith('https://'));} + if(adRevenueMonth===undefined)assert.ok(!r.main.some(c=>c.slug==='mediavine')); + if(pageviews<10000&&(adRevenueMonth===undefined||adRevenueMonth<500))for(const c of r.main){const p=adNetworkProfiles.find(p=>p.slug===c.slug);assert.ok(p.tier<3);assert.notEqual(p.evidence,'low');} + const pc=r.main.find(c=>c.slug==='publisher-collective');if(pc&&!['tech','gaming','crafts','education','sports','health-fitness'].includes(niche))assert.ok(pageviews>=3000000); + } + for(const current of adNetworkProfiles.map(p=>p.slug)){ + const r=recommend({...base,pageviews:3000000,adRevenueMonth:12000,current});const tier=adNetworkProfiles.find(p=>p.slug===current).tier; + for(const c of r.main.filter(c=>c.lane==='main')){const p=adNetworkProfiles.find(p=>p.slug===c.slug);const pt=c.slug==='newor-media'?{Elevate:1,Catapult:2,Premier:3}[c.program]:p.tier;assert.ok(pt>=tier);assert.notEqual(c.slug,current);} + } +}); +test('peer weights require real counts and never change other-niche results',()=>{ + const x=input(scenarios[1].input);const no=recommendAdNetworks(x,null); + assert.deepEqual(recommendAdNetworks(x,{monumetric:4}),no); + const five=recommendAdNetworks(x,{monumetric:5}).main.find(c=>c.slug==='monumetric');assert.equal(five.debug.P,0.25);assert.equal(five.detail.peers,5); + const twenty=recommendAdNetworks(x,{monumetric:20}).main.find(c=>c.slug==='monumetric');assert.equal(twenty.debug.P,1); + assert.deepEqual(recommendAdNetworks({...x,niche:'other'},{monumetric:100}),recommendAdNetworks({...x,niche:'other'},null)); +}); +test('parsing, boundaries and share validation accept a correct example and reject invalid input',()=>{ + const raw={niche:'food',pageviews:'40, 000',visits:'22 000',visitsUnit:'sessions',siteAge:'gt12m',tier1Share:'65',current:'google-adsense',adRevenueMonth:'350'}; + assert.deepEqual(validateRecommendationInput(raw),{ok:true,input:input(scenarios[1].input)}); + for(const [key,value,code] of [['pageviews','-5','negative'],['pageviews','abc','not_a_number'],['pageviews','9.5','not_whole'],['pageviews','10000000001','too_large'],['tier1Share','101','over_100'],['tier1Share','50.11','too_many_decimals'],['adRevenueMonth','100000000.01','too_large'],['adRevenueMonth','4.001','too_many_decimals'],['siteAge','2y','invalid_choice'],['current','foo','invalid_choice'],['niche','','required'],['pageviews','','required'],['niche','foo','invalid_choice'],['visitsUnit','pv','invalid_choice']]){const result=validateRecommendationInput({...raw,[key]:value});assert.equal(result.ok,false);assert.equal(result.errors[key],code);} + assert.equal(validateRecommendationInput({niche:'food',pageviews:'40000',shareUS:'60',shareGB:'50'}).errors.shareUS,'shares_over_100'); + assert.equal(validateRecommendationInput({niche:'food',pageviews:'40000',tier1Share:'40',shareUS:'45'}).errors.shareUS,'shares_over_tier1'); + assert.equal(validateRecommendationInput({niche:'food',pageviews:'40000',visitsUnit:'bad'}).ok,true); + assert.equal(validateRecommendationInput({niche:'food',pageviews:'10000000000',adRevenueMonth:'100000000'}).ok,true); + const partial=validateRecommendationInput({niche:'food',pageviews:'40000',tier1Share:'50',shareUS:'50.4'});assert.equal(partial.input.tier1Share,50.4); +}); +test('share links round trip only the new contract and preserve invalid choices for validation',()=>{ + const raw={niche:'food',pageviews:'40000',visits:'22000',visitsUnit:'sessions',siteAge:'gt12m',tier1Share:'65',current:'google-adsense',adRevenueMonth:'350',shareUS:'0'}; + assert.deepEqual(parseRecommendationQuery(new URLSearchParams(recommendationShareParams(raw))),{shared:true,raw}); + assert.deepEqual(parseRecommendationQuery(new URLSearchParams('traffic=40000&rev_prev=5000&pv_min3=10000&domain_on=2000-01-01&site=example.com')),{shared:false,raw:{}}); + assert.equal(parseRecommendationQuery(new URLSearchParams('niche=')).shared,true);assert.ok(!('siteAge' in recommendationShareParams({siteAge:''}))); + const parsed=parseRecommendationQuery(new URLSearchParams('niche=food&pv=9.5&age=2y¤t=foo'));assert.equal(validateRecommendationInput(parsed.raw).errors.siteAge,'invalid_choice'); + assert.deepEqual(recommend(scenarios[1].input),recommend(scenarios[1].input)); +}); + +function pageModule(query,list){ + const exports={},imports={ + 'server-only':{},'next/cache':{unstable_cache:(fn,keys,options)=>{assert.equal(options.revalidate,false);assert.ok(options.tags.includes('stack127-ad-networks'));return fn;}}, + '../ad-networks':{queryAdNetworkReport:query,listAdNetworks:list},'../ad-network-niches.ts':{adNetworkNiches},'../cache-tags':{AD_NETWORKS_TAG:'stack127-ad-networks'},'../../app/ui/ad-networks/network-logo-src':{networkLogo:()=>null},'./profiles.ts':{adNetworkProfiles},'./engine.ts':{recommendAdNetworks}, + }; + const code=ts.transpileModule(fs.readFileSync(new URL('../../../lib/ad-network-requirements/page-data.ts',import.meta.url),'utf8'),{compilerOptions:{target:ts.ScriptTarget.ES2022,module:ts.ModuleKind.CommonJS}}).outputText; + vm.runInNewContext(code,{exports,require(name){assert.ok(name in imports,name);return imports[name];}});return exports; +} +test('static page data uses one bounded confirmed-peer query and all 44 DB names, including legacy',async()=>{ + let queries=0; + const mod=pageModule(async(sql,args)=>{queries++;assert.match(sql,/r.status='confirmed'/);assert.match(sql,/group by p.niche,n.slug/);assert.equal(args[0].length,20);assert.equal(args[1].length,44);return {rows:[{niche:'food',slug:'monumetric',count:20},{niche:'tech',slug:'ethicalads',count:4}]};},async()=>adNetworkProfiles.map(p=>({slug:p.slug,name:`DB ${p.slug}`}))); + const data=await mod.loadRequirementsPageData();assert.equal(queries,1);assert.equal(data.networks.length,44);assert.equal(data.networks.find(n=>n.slug==='pubnation').name,'DB pubnation');assert.equal(data.peers.food.monumetric,20);assert.equal(data.defaultResult.main.find(c=>c.slug==='monumetric').detail.peers,20); +}); +test('static page data throws on missing DB brands or failed peer loading',async()=>{ + const missing=pageModule(async()=>({rows:[]}),async()=>[]);await assert.rejects(missing.loadRequirementsPageData(),/Missing ad network/); + const failed=pageModule(async()=>{throw Error('database unavailable');},async()=>[]);await assert.rejects(failed.loadRequirementsPageData(),/database unavailable/); +}); + +test('numeric inputs accept pasted thousands separators without weakening bounds or precision',()=>{ + for(const value of ['1,100','1 100','1\u00a0100']) { + const result=validateRecommendationInput({niche:'food',pageviews:'40000',adRevenueMonth:value}); + assert.equal(result.ok,true);assert.equal(result.input.adRevenueMonth,1100); + } + const decimal=validateRecommendationInput({niche:'food',pageviews:'40000',adRevenueMonth:'1,100.25',tier1Share:'6 5.0',shareUS:'3 0.0'}); + assert.equal(decimal.ok,true);assert.equal(decimal.input.adRevenueMonth,1100.25);assert.equal(decimal.input.tier1Share,65);assert.equal(decimal.input.shares.US,30); + assert.equal(validateRecommendationInput({niche:'food',pageviews:'40000',adRevenueMonth:'1,100.251'}).errors.adRevenueMonth,'too_many_decimals'); + assert.equal(validateRecommendationInput({niche:'food',pageviews:'40000',adRevenueMonth:'100,000,001'}).errors.adRevenueMonth,'too_large'); + assert.equal(validateRecommendationInput({niche:'food',pageviews:'40000',shareUS:'1,000'}).errors.shareUS,'over_100'); +}); +test('every recommendation has readable, dated sources even when no published bar exists',()=>{ + for(const profile of adNetworkProfiles) { + assert.ok(profile.sources.length>0,profile.slug); + for(const source of profile.sources) { + assert.ok(source.label.length>0&&source.label!==source.url,profile.slug); + assert.ok(!/https?:\/\/|\d{9,}/.test(source.label),source.label); + assert.match(source.url,/^https?:\/\//);assert.match(source.checkedAt,/^\d{4}-\d{2}-\d{2}$/); + } + for(const bar of profile.bars)assert.ok(profile.sources.some(source=>source.url===bar.sourceUrl),`${profile.slug}: missing source for bar`); + } + for(const [slug,x] of [ + ['buysellads-carbon-ads',{niche:'tech',pageviews:60000,siteAge:'gt12m',tier1Share:55}], + ['nitropay',{niche:'gaming',pageviews:300000,siteAge:'gt12m',tier1Share:60}], + ['venatus',{niche:'gaming',pageviews:1000000,siteAge:'gt12m',tier1Share:60}], + ]) { + const card=only(slug,x);assert.ok(card,slug);assert.equal(card.detail.bars.length,0); + assert.ok(card.detail.sources.length>0); + assert.ok(card.detail.sources.every(source=>adNetworkProfiles.find(profile=>profile.slug===slug).joiningSourceUrls.includes(source.url))); + } +}); +test('conditional and program-level bars explain which threshold applies',()=>{ + const raptive=only('raptive',{...base,pageviews:120000}); + const shares=raptive.detail.bars.filter(bar=>bar.metric==='tier1_share'); + assert.match(shares.find(bar=>bar.amount===50).scope,/under 100,000 pageviews/); + assert.match(shares.find(bar=>bar.amount===40).scope,/from 100,000 pageviews/); + for(const profile of adNetworkProfiles) { + const scopes=new Set(); + for(const bar of profile.bars) { + const key=JSON.stringify([bar.metric,bar.period,bar.program,bar.kind,bar.scope]); + assert.ok(!scopes.has(key),`${profile.slug}: ambiguous threshold scope`);scopes.add(key); + } + } + const journey=only('journey-by-mediavine',{...base,pageviews:120000}); + assert.deepEqual(journey.detail.alsoNeeds.filter(key=>['domain_age_4_months','domain_history_4_months_guidance'].includes(key)),['domain_history_4_months_guidance']); +}); +test('Setupad Self-Serve entry is 10 million visits; 50 million describes the Enterprise plan',()=>{ + const card=only('setupad',{niche:'food',visits:10000000,visitsUnit:'visits',siteAge:'gt12m',tier1Share:60}); + assert.equal(card.program,'Self-Serve');assert.equal(card.debug.basis,'published_number');assert.equal(card.reason.values.bar,10000000); + assert.deepEqual(card.detail.bars.filter(bar=>bar.kind==='requirement').map(bar=>bar.amount),[10000000]); + const enterprise=card.detail.bars.find(bar=>bar.amount===50000000); + assert.equal(enterprise.kind,'guidance');assert.match(enterprise.scope,/Enterprise plan/); +}); + +test('public details cite official joining pages, never research anecdotes or payment and earnings pages',()=>{ + for(const profile of adNetworkProfiles) { + assert.ok(profile.joiningSourceUrls.length>0,profile.slug); + assert.ok(profile.joiningSourceUrls.every(url=>profile.sources.some(source=>source.url===url)),profile.slug); + if(profile.lane==='legacy')continue; // Legacy brands never produce recommendations. + const niche=profile.nicheGate?.[0]??profile.strong[0]??'food'; + const result=recommendAdNetworks(input({niche,pageviews:100000000,visits:90000000,visitsUnit:'visits',siteAge:'gt12m',tier1Share:90,shares:{US:80,GB:4,CA:3,AU:2,NZ:1},adRevenueMonth:1000000,current:'none'}),null,[profile]); + const card=[...result.main,...result.more.add,...result.more.setup].find(card=>card.slug===profile.slug); + assert.ok(card,profile.slug);assert.ok(card.detail.sources.length>0,profile.slug); + for(const source of card.detail.sources) { + assert.doesNotMatch(source.label,/anecdote|forum|report/i); + assert.doesNotMatch(source.url,/reddit\.com|trustpilot\.com|medium\.com|g2\.com|redvolcano\.io|adxdesk\.com/); + assert.ok(profile.joiningSourceUrls.includes(source.url));assert.match(source.checkedAt,/^\d{4}-\d{2}-\d{2}$/); + } + for(const bar of card.detail.bars)assert.ok(card.detail.sources.some(source=>source.url===bar.sourceUrl)); + } + const raptive=only('raptive',{...base,pageviews:120000});assert.equal(raptive.detail.sources.length,1);assert.match(raptive.detail.sources[0].url,/Who-is-eligible/); + const journey=only('journey-by-mediavine',{...base,pageviews:120000});assert.equal(journey.detail.sources.length,3); + const carbon=only('buysellads-carbon-ads',{niche:'tech',pageviews:60000,siteAge:'gt12m',tier1Share:55});assert.equal(carbon.detail.sources.length,3); + assert.ok(adNetworkProfiles.find(profile=>profile.slug==='raptive').sources.some(source=>/anecdote/i.test(source.label))); +}); + +test('Monumetric Propel conditions stay explicitly scoped on the 120k-pageview recommendation',()=>{ + const result=recommend({niche:'food',pageviews:120000,visits:70000,siteAge:'gt12m',tier1Share:70,current:'google-adsense',adRevenueMonth:1100}); + const card=result.main.find(card=>card.slug==='monumetric');assert.ok(card); + for(const key of ['six_ad_slots','setup_fee_99_usd','wordpress_or_blogger'])assert.ok(!card.detail.alsoNeeds.includes(key)); + for(const key of ['propel_six_ad_slots','propel_setup_fee_99_usd','propel_wordpress_or_blogger'])assert.ok(card.detail.alsoNeeds.includes(key)); + assert.ok(card.detail.alsoNeeds.includes('english'));assert.ok(card.detail.alsoNeeds.includes('three_month_history')); + assert.ok(card.detail.sources.some(source=>source.url==='https://www.monumetric.com/frequently-asked-questions/')); +}); +test('Newor and Setupad keep program-specific requirements on the right program',()=>{ + const x={niche:'food',siteAge:'gt12m',tier1Share:70}; + for(const [pageviews,shares,program] of [[40000,undefined,'Elevate'],[100000,{US:62},'Catapult'],[1000000,{US:60},'Premier']]) { + const card=only('newor-media',{...x,pageviews,shares});assert.equal(card.program,program); + assert.ok(card.detail.alsoNeeds.includes('own_gam'));assert.ok(card.detail.alsoNeeds.includes('exclusive')); + assert.equal(card.detail.alsoNeeds.includes('english'),program==='Elevate'); + } + for(const [visits,program] of [[1000000,'Managed'],[10000000,'Self-Serve']]) { + const card=only('setupad',{...x,visits,visitsUnit:'visits'});assert.equal(card.program,program); + assert.equal(card.detail.alsoNeeds.includes('own_gam'),program==='Self-Serve'); + } +}); +test('Ezoic Incubator note appears only while the estimated users could be under the standard threshold',()=>{ + const x={niche:'tech',siteAge:'gt12m',tier1Share:70}; + const straddling=only('ezoic',{...x,pageviews:700000});assert.ok(straddling);assert.ok(straddling.detail.alsoNeeds.includes('incubator_limited')); + const standard=only('ezoic',{...x,visits:250000,visitsUnit:'users'});assert.ok(standard);assert.ok(!standard.detail.alsoNeeds.includes('incubator_limited')); + assert.deepEqual(only('ezoic',{...x,visits:100000,visitsUnit:'users'}),undefined); +}); diff --git a/tests/pages/ad-networks/report.test.mjs b/tests/pages/ad-networks/report.test.mjs index 56d99ac1..9acb0c2b 100644 --- a/tests/pages/ad-networks/report.test.mjs +++ b/tests/pages/ad-networks/report.test.mjs @@ -77,12 +77,12 @@ test('simultaneous cold niche reports share reads and recover after a shared dat assert.deepEqual(first,second); assert.equal(first.listed,0); }); -test('niches need 100 classified sites and 80 percent scope coverage',()=>{ +test('niches need 100 classified sites, however many still wait for the weekly sort',()=>{ assert.equal(hasAdNetworkNicheCoverage(0,0),false); assert.equal(hasAdNetworkNicheCoverage(99,99),false); assert.equal(hasAdNetworkNicheCoverage(125,99),false); assert.equal(hasAdNetworkNicheCoverage(125,100),true); - assert.equal(hasAdNetworkNicheCoverage(126,100),false); + assert.equal(hasAdNetworkNicheCoverage(112747,87088),true); }); test('site controls disappear and reappear when their source fields fill',()=>{ const empty=adNetworkSiteAvailability(emptyCoverage); diff --git a/tests/pages/ad-revenue-calculator/ad-revenue-calculator.test.mjs b/tests/pages/ad-revenue-calculator/ad-revenue-calculator.test.mjs new file mode 100644 index 00000000..9eb8e5aa --- /dev/null +++ b/tests/pages/ad-revenue-calculator/ad-revenue-calculator.test.mjs @@ -0,0 +1,77 @@ +import assert from "node:assert/strict"; +import test from "node:test"; +import { + AD_REVENUE_EXAMPLE_INPUT, + adRevenueInputFromQuery, + adRevenueShareParams, + calculateAdRevenue, +} from "../../../lib/ad-revenue-calculator/engine.ts"; + +function run(overrides = {}) { + return calculateAdRevenue({ ...AD_REVENUE_EXAMPLE_INPUT, ...overrides }); +} +function values(overrides = {}) { + const result = run(overrides); + assert.equal(result.status, "valid", JSON.stringify(result.errors)); + return result.values; +} +function errors(overrides = {}) { + const result = run(overrides); + assert.equal(result.status, "invalid"); + return result.errors; +} + +test("every tab opens on the same example answer", () => { + const revenue = values({ tab: "revenue" }); + assert.equal(revenue.rpm.cents, 1200n); + assert.equal(revenue.monthly.cents, 60000n); + assert.equal(revenue.yearly.cents, 720000n); + + const cpm = values({ tab: "cpm" }); + assert.equal(cpm.rpm.cents, 1200n); + assert.equal(cpm.monthly.cents, 60000n); + assert.deepEqual(cpm.impressions, { monthly: 200000n, yearly: 2400000n }); + + const find = values({ tab: "rpm" }); + assert.equal(find.rpm.cents, 1200n); + assert.equal(find.yearly.cents, 720000n); +}); + +test("yearly revenue is exact, not 12 times a rounded month", () => { + const result = values({ traffic: "333", rpm: "1" }); + assert.equal(result.monthly.cents, 33n); + assert.equal(result.yearly.cents, 400n); +}); + +test("CPM to RPM uses fractional impressions and works without traffic", () => { + const result = values({ tab: "cpm", cpm: "2.35", impressions: "3.5", traffic: "", unit: "sessions" }); + assert.equal(result.rpm.cents, 823n); // 822.5 rounds half up + assert.equal(result.monthly, null); + assert.equal(result.impressions, null); +}); + +test("Find RPM rounds and marks a rate under one cent", () => { + assert.equal(values({ tab: "rpm", revenue: "100", traffic: "30,000" }).rpm.cents, 333n); + const tiny = values({ tab: "rpm", revenue: "0.01", traffic: "10000000" }).rpm; + assert.deepEqual(tiny, { cents: 0n, underCent: true }); +}); + +test("invalid input names the field and the limit", () => { + assert.deepEqual(errors({ tab: "rpm", traffic: "0" }), { traffic: "Enter more than 0 pageviews to find RPM." }); + assert.equal(errors({ traffic: "", unit: "sessions" }).traffic, "Enter monthly sessions."); + assert.equal(errors({ traffic: "1.5" }).traffic, "Enter a whole number."); + assert.equal(errors({ rpm: "-2" }).rpm, "Enter 0 or more."); + assert.equal(errors({ rpm: "1.234" }).rpm, "Use up to 2 decimals."); + assert.equal(errors({ tab: "cpm", impressions: "1001" }).impressions, "Enter 1,000 or less."); + assert.equal(errors({ tab: "cpm", cpm: "abc" }).cpm, "Enter a number, such as 12.50."); +}); + +test("a shared link reopens only the active tab's fields", () => { + const params = adRevenueShareParams({ ...AD_REVENUE_EXAMPLE_INPUT, tab: "cpm", traffic: "" }); + assert.deepEqual(params, { tab: "cpm", unit: "pageviews", cpm: "3.00", impressions: "4" }); + const input = adRevenueInputFromQuery((key) => params[key] ?? ""); + assert.equal(input.tab, "cpm"); + assert.equal(input.traffic, ""); + assert.equal(input.rpm, AD_REVENUE_EXAMPLE_INPUT.rpm); + assert.equal(adRevenueInputFromQuery(() => ""), null); +});