Cloud Run serves your container — your container receives each article.
Google Cloud Run has no content API to publish into: the Cloud Run Admin API manages services, revisions, jobs and instances, and none of them is somewhere an article can live. Your app on Cloud Run receives every article automatically through a signed webhook instead — a POST route in the container that Google Cloud buildpacks built from source, or that your Dockerfile produced. Allow public access, finish the database write before responding, and your own pages render the post.
| Cloud Run content API | None — services, revisions, jobs — the Admin API has no post, page or article resource |
|---|---|
| Delivery target | A route in your service — signed and timestamped; anything older than 300 seconds is rejected |
| Build | Buildpacks or your Dockerfile — gcloud run deploy --source . handles both |
| Access | Service must allow public access — a private service refuses the delivery before your code runs |
| Min instances 0 | Cold start on the next request — can outlast the 10-second Send test; --min 1 keeps one instance ready |
Who does what
Deploy the recipe for your container’s stack, allow public access, and add the secret in a new revision. Once the signed test is green, articles need no minutes from you, and the pages and routes in your service remain yours to design.
Write the post before you respond — CPU is throttled after.
Setup
Your stack decides the recipe; Cloud Run adds three rules — a public service, a PORT listener and a secret in the revision.
Connect a site → Google Cloud Run and pick what your container runs — Java / Spring, Kotlin (Ktor), Go, FastAPI, Django, Ruby on Rails, Next.js and more. Its recipe opens alongside your signing secret.
~1 minute
Add the recipe’s route, listening on 0.0.0.0 and PORT, and run gcloud run deploy --source . to build it with buildpacks or your Dockerfile. Then turn on Allow public access on the Security tab, or run gcloud run services update with --no-invoker-iam-check.
~10 minutes
Edit & deploy new revision → Variables & Secrets: reference a Secret Manager secret, or add DRAFTSEO_WEBHOOK_SECRET as a variable. From a terminal, gcloud run services update <service> --region <region> --update-env-vars does the same and rolls out a new revision.
~2 minutes
Register the https:// service URL, then DraftSEO sends a signed test delivery — and a deliberately invalid one, which your receiver must reject. An idle service at min instances 0 can cold-start past the 10-second test; --min 1 avoids it.
~1 minute
New articles post to your service on schedule, with images and metadata inside every payload.
Ongoing · zero clicks
FAQ
No — Cloud Run has nowhere for an article to go. The Cloud Run Admin API manages services, revisions, jobs and instances, and none of them is a post or a page. DraftSEO publishes into the service you deploy on Cloud Run, which is the code that renders your blog.
Google Cloud buildpacks cover Node.js, Python, Go, Java (Kotlin included), .NET, Ruby and PHP, so gcloud run deploy --source . builds the Next.js, Node.js / Express, Astro, SvelteKit, Nuxt (Vue), Expo, plain PHP, Laravel, Django, FastAPI, Ruby on Rails, Go, ASP.NET Core, Java / Spring and Kotlin (Ktor) recipes. Rails needs a Procfile so the buildpack knows how to start it. Rust / Axum and Elixir / Phoenix need a Dockerfile — Google’s other-languages quickstart links samples for both — and the same command builds from it.
Only with a second service. Cloud Run always runs a container, so a static site there is a web server with no code of its own to handle a POST. Deploy the Node.js recipe as its own small service and point the DraftSEO endpoint at it.
Because the service is private, and a private Cloud Run service refuses DraftSEO’s delivery before your container sees it. Turn on Allow public access on the service’s Security tab, or run gcloud run services update <service> --region <region> --no-invoker-iam-check. Your receiver’s signature check still rejects any request DraftSEO did not sign.
Both can. With minimum instances at 0 — the default — an idle service cold-starts on the next request and can outlast the 10-second Send test; gcloud run services update <service> --min 1 keeps an instance ready. And once the response is sent, Cloud Run throttles the instance’s CPU, so finish the database write before you reply — work left for later may never run.
No card required. Signed test delivery in under a minute.