Articles go to your App Hosting backend, not into Firebase itself.
The Firebase Hosting API creates and releases whole-site versions, and Firestore is a database your own code reads — so Firebase offers no post or page an outside service could publish to. Your App Hosting backend can take the article instead: give your Next.js, Nuxt, SvelteKit or Astro app a receiver route, or put a Cloud Function behind a Hosting rewrite for a static site. Every finished article then arrives there as a signed JSON POST.
| Firebase content API | None — Hosting versions and releases — no post or page resource; Firestore is your own code’s database |
|---|---|
| Article endpoint | Your App Hosting backend — or a Cloud Function behind a Hosting rewrite from /webhook |
| Tamper protection | Signed, timestamped JSON — your code checks the HMAC over ${timestamp}.${rawBody} inside a 5-minute window |
| Billing plan | Blaze required — App Hosting and Cloud Functions both need pay-as-you-go |
| Idle backends | minInstances defaults to 0 — a cold start can outlast the 10-second Send test; minInstances: 1 keeps one warm |
Who does what
Name the framework your backend runs, paste its receiver, and reference the signing secret in apphosting.yaml. Once the signed test goes green, articles take none of your time, and your routes, components and data stay under your control.
Roll out one new build — the secret then reaches your server at runtime.
Setup
Firebase’s part is the plan, the secret and the cold start; the receiver itself is your framework’s recipe.
Connect a site → Firebase, then choose Next.js, Nuxt (Vue), SvelteKit, Astro or Node.js / Express. The recipe opens with your signing secret beside it.
~1 minute
App Hosting and Cloud Functions both need Blaze (pay-as-you-go). On classic static Hosting, the receiver is a Cloud Function reached through a rewrite from /webhook — the function and the rewrite are both ready to paste.
~1 minute
Run firebase apphosting:secrets:set DRAFTSEO_WEBHOOK_SECRET and let it grant your backend access, then list the secret under env in apphosting.yaml with RUNTIME availability and roll out a new build.
~5 minutes
Your backend receives a signed test delivery — and a deliberately invalid one, which your receiver must reject. If the first attempt times out on a cold start, set minInstances: 1 under runConfig to keep an instance warm.
~1 minute
Articles now reach your backend as they are scheduled, with images and SEO fields in every payload.
Ongoing · zero clicks
FAQ
No — Firebase has nothing an article could be published into. The Hosting API creates and releases whole-site versions with no post or page resource, and Firestore is a database your own code reads, not a publishing target. DraftSEO publishes into the app App Hosting serves, which is the code that renders your blog.
App Hosting runs Node.js apps, and DraftSEO has receiver recipes for Next.js, Nuxt, SvelteKit, Astro and Node.js / Express there. Express starts through the Node.js buildpack with a start script (or server.js) listening on PORT, and Firebase describes its Astro adapter as a proof of concept, so check it builds your app first. A site in another language often runs on Google Cloud Run, which Firebase Hosting can route a path to — the receiver recipe is the same either way.
Yes, through a Cloud Function. Classic Hosting serves static files only, so add a Cloud Function as the receiver and a Hosting rewrite from /webhook to it; the connect wizard gives you both ready to paste. Cloud Functions need the Blaze plan. If firebase.json sets trailingSlash or has redirects, keep them off the webhook path — redirects run before rewrites, and DraftSEO does not follow them.
App Hosting sets minInstances to 0 by default, so an idle backend cold-starts on the next request and the 10-second Send test can run out first. Add minInstances: 1 under runConfig in apphosting.yaml to keep one instance warm.
Not safely. App Hosting runs on Cloud Run, which throttles CPU once the response is sent, so finish the database write first and answer DraftSEO afterwards.
No card required. Signed test delivery in under a minute.