Skip to main content
The Google Ads API is in beta. Its endpoints and responses may change.
Base44 can create and run Google Ads campaigns for an app through a Google Ads account connected to your workspace. The Google Ads API manages those campaigns: create one, read what it is doing, change its budget or its copy, pause and resume it, and read the history of everything that changed it. It also manages campaign briefs, which are the saved plans you build a campaign from. Use the Google Ads API to:
  • List an app’s campaigns with their budgets, statuses, and performance.
  • Create a Smart or Performance Max campaign and start it serving.
  • Change one section of a campaign, such as its name, budget, or ad copy.
  • Pause and resume a campaign, or pause every campaign at once.
  • Change the daily budget on several campaigns in one call.
  • Read a campaign’s change history, including changes Base44 made on its own.
  • Save a campaign brief, or have Base44 write one for you, and edit it before you launch.
These endpoints spend money. Creating a campaign and resuming a paused one both open live ad spend against the payment method on the workspace, and a budget change takes effect the same day.

Prerequisites

  • A personal API key. See Authentication to get one. These endpoints share the App Management API’s api_key header and base URL.
  • An app you can edit.
  • A Google Ads account connected to the app, with a payment method on file. Without one, every endpoint here returns a 404.

App ID

Every endpoint includes the app’s ID in the URL path as app_id. To get your app ID:
  1. Go to app.base44.com.
  2. Open your app in the app editor.
  3. Copy the app ID from the editor URL: "https://app.base44.com/apps/<app_id>/editor".

Budgets are in micros

Every budget field is in micros of the account currency, where 1,000,000 micros is one unit. A daily budget of 15.00 is 15000000. Google enforces a minimum daily budget that differs per currency. A budget below it comes back as a 400 carrying Google’s reason, and the campaign is not created.

Start from the campaign list

List campaigns is the entry point. Each row carries the campaign’s id, which every other endpoint takes as campaign_id in the path. The list rows are built for a table, so they carry performance metrics but leave out the campaign’s landing page, targeting, and phone number. Read Get campaign when you need those.
The list returns at most 50 campaigns, ordered by spend, and there is no pagination. An account with more than 50 campaigns gets an incomplete list with nothing in the response to say so.

A write can succeed on Google and still report a failure

Base44 applies a change on Google Ads first and then updates its own record. Those two steps are not a single transaction, so a request can change the live campaign and still come back as an error. A 409 means exactly this: the request reached Google Ads and then timed out, so the change may or may not have been applied. Read the campaign back with Get campaign before you retry, or you can apply the same change twice. Bulk update campaign budgets has the same seam in a quieter form. It is not atomic: each entry is applied on its own, and the response lists the ones that worked in succeeded and the rest in failed. A failed entry usually means the budget did not change, but it can also mean Google accepted the new budget and only Base44’s record of it failed. Verify before you treat a failed entry as unchanged.

Campaign briefs are plans, not campaigns

A brief is saved input for a campaign you have not launched: the business details, the keywords, the budget you have in mind, and the ad copy. Base44 stores it so you can build a campaign over several requests instead of one. Nothing about a brief reaches Google Ads. A brief spends no money, and creating, editing or deleting one never changes a campaign that is already running. That also means the brief endpoints need no connected Google Ads account and return none of the Google-side errors the campaign endpoints do. Generate campaign brief writes the ad copy for you from a few business details. It runs a language model, so it is slower than the rest and draws on a per-app quota shared with the other Google Ads generation endpoints.
A failed generation still returns a 200 with a saved brief. Check that headlines and descriptions came back non-empty before you use the result.
Nothing keeps you to one brief per campaign type, so a retried create leaves duplicates. Read the list first and update the brief you already have.

Deleting a campaign is permanent

Delete campaign cannot be undone, and there is no endpoint to restore a deleted campaign. Use Pause campaign to stop a campaign temporarily. Google keeps a deleted campaign for reporting, so it stays in the campaign list with a status of REMOVED and its past spend still counts toward account totals.