Launch Google Ads campaign
<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>
Creates the app's Google Ads account if it does not have one, then creates a campaign on it. This is what starts spending money.
Call Get launch readiness first and send its landing_page back here. Its currency_code is informational: there is no currency field on this request, and Base44 derives the account's currency itself.
<Warning>Creating the Google Ads account cannot be undone. There is no endpoint that deletes one, and an account keeps its currency and time zone for life. A later launch reuses that account, so the first attempt is what commits you to its currency.</Warning>
<Warning>A failure at the campaign step is not automatically safe to retry. Google Ads can create the campaign and then a follow-up step fail, which leaves it live and spending while Base44 has no record of it — so it does not appear in List campaigns either. The error message says when that is what happened and tells you not to re-approve. Read it before retrying.</Warning>
Base44 checks what it can from the request before creating anything: a Performance Max campaign needs logo_url, the budget has to sit inside the per-currency range for the campaign type, the business name has a length limit, and targeting that can reach the EU needs an EU political-advertising declaration. Those all fail with a 400 and create nothing. Anything only Google can judge — a logo it cannot fetch, a landing page it cannot crawl — fails after the account exists.
A 409 has four different causes and they are not all safe to retry:
- the workspace is on billing hold, or the account is, so no new spend is allowed. Fix the billing problem and retry.
- the campaign was already launched from this draft. Retrying will not create a second one.
- the request to Google Ads timed out after being sent. The campaign may be live and spending. Do not retry: read List campaigns and check before doing anything else.
The response carries the account and the campaign. A campaign can come back paused when its conversion tracking is not wired yet; Base44 enables it on its own once tracking verifies.
Launching is refused, rather than allowed through, while Base44 cannot reach its payment provider to confirm a card is on file. Get launch readiness reports that state as stripe_unavailable, so check it there instead of inferring it from a failed launch.
<Note>This endpoint accepts a personal API key. Workspace API keys are not authorized for it and are rejected with a 403.</Note>
<Warning>The response includes fields beyond the ones documented here. Don't rely on undocumented response fields, as they can change at any time. Send only the fields documented here. Other request fields are not supported and their behavior can change.</Warning>
Path parameters
ID of the app to advertise.
ID of the app to advertise.
Request body
Response
The account the campaign lives on, and the campaign.
Example response
{
"account": {
"id": "68b1c0d4e7b91d003c45a1f0",
"status": "ACTIVE",
"account_name": "Nordwind Furniture",
"currency_code": "EUR",
"timezone": "Europe/Berlin",
"google_customer_id": "1234567890"
},
"campaign": {
"id": "68b1c0d4e7b91d003c45a1f2",
"google_campaign_id": "21098765432",
"campaign_name": "Spring sale in Berlin",
"campaign_type": "SMART",
"status": "ENABLED",
"daily_budget_micros": 15000000,
"landing_page": "https://example.com/spring",
"geo_targets": [
"1003854"
],
"phone_number": "+493012345678",
"learning_ends_at": "2026-09-08T11:20:00Z",
"review_status": "REVIEWED",
"serving_status": "SERVING",
"primary_status": "ELIGIBLE",
"primary_status_reasons": [
"CAMPAIGN_BUDGET_LIMITED"
],
"created_date": "2026-08-25T11:20:00Z",
"updated_date": "2026-08-25T14:05:00Z"
}
}Changes
Changed in 1 of the 10 revisions of this API.1
- ○
endpoint added
endpoint-added
- ○