Ads and Commerce

Tutorials and Recipes

Updated: Apr 29, 2026
Learn how to find the IDs you need, create your first ad campaign end-to-end, automate workflows with scripts, and clean up resources.

Find your IDs

Ad account ID

meta ads adaccount list
Look for the id column.
Set it with:
export AD_ACCOUNT_ID=<AD_ACCOUNT_ID>

Facebook Business Page ID

Use the Business Page ID when creating ad creatives with the --page-id flag. You can also find Business Page IDs in Business Settings. These can only be Pages that are associated with a business the system user has access to.
meta ads page list

Business ID

Ads CLI typically resolves the business ID automatically from your ad account. If needed, set it explicitly:
export BUSINESS_ID=<BUSINESS_ID>

Your first ad campaign (end-to-end)

This walkthrough creates a complete ad setup: ad campaign, ad set, ad creative, and ad.

1. Authenticate and configure

Generate a system user token (see Get Started), then configure it:
# Set your access token
export ACCESS_TOKEN=<ACCESS_TOKEN>

# Find your ad account
meta ads adaccount list

# Set it for the session
export AD_ACCOUNT_ID=<AD_ACCOUNT_ID>

2. Find your Business Page ID

Every ad creative needs a Business Page as its identity:
meta ads page list
Save the returned id for the Business Page you want to use.

3. Create an ad campaign

meta ads campaign create \
  --name "My First Campaign" \
  --objective OUTCOME_TRAFFIC \
  --daily-budget 5000
Save the returned ad campaign ID to create your ad set.

4. Create an ad set

meta ads adset create <CAMPAIGN_ID> \
  --name "US Audience" \
  --optimization-goal LINK_CLICKS \
  --billing-event IMPRESSIONS \
  --targeting-countries US
You can omit the budget here because the ad campaign already has a daily budget (campaign budget optimization). Save the returned ad set ID to create your ad.

5. Create an ad creative

meta ads creative create \
  --name "Hero Banner" \
  --image ./banner.jpg \
  --page-id <PAGE_ID> \
  --body "Check out our latest deals!" \
  --title "Shop Now" \
  --link-url https://example.com/sale \
  --call-to-action SHOP_NOW
Save the returned ad creative ID to create your ad.

6. Create an ad

meta ads ad create <AD_SET_ID> \
  --name "Hero Banner Ad" \
  --creative-id <CREATIVE_ID>

7. Activate your ad

Ads CLI creates everything in PAUSED status by default. When ready to go live, run:
meta ads campaign update <CAMPAIGN_ID> --status ACTIVE
meta ads adset update <AD_SET_ID> --status ACTIVE
meta ads ad update <AD_ID> --status ACTIVE

Scripts and automation

Ads CLI supports scripting with --no-input, --force, and structured output.

Environment-based configuration

For details on environment variables and configuration precedence, see Configuration.
# CI/CD pipeline example
export ACCESS_TOKEN="$META_SYSTEM_USER_TOKEN"
export AD_ACCOUNT_ID=<AD_ACCOUNT_ID>
export BUSINESS_ID=<BUSINESS_ID>  # Inferred from ad account if missing

meta --output json ads campaign list

Non-interactive mode

Use --no-input and --force to suppress all prompts:
meta --no-input ads campaign delete <CAMPAIGN_ID> --force

JSON output for scripts

# Retrieve ad campaign IDs
CAMPAIGN_IDS=$(meta --output json ads campaign list | jq -r '.[].id')

# Iterate over ad campaigns
for id in $CAMPAIGN_IDS; do
  echo "Processing ad campaign $id"
  meta ads insights get --campaign-id "$id" --fields conversions,purchase_roas
done

Check exit codes

meta ads campaign list
if [ $? -eq 3 ]; then
  echo "Not authenticated -- add token to .env"
fi
Exit CodeMeaning
0
Success
1
General error
2
Usage / argument error
3
Authentication error
4
API error
5
Resource not found

Cleanup: delete resources

Delete resources

Deleting an ad campaign automatically cascades to its child ad sets and ads. Deleting an ad set cascades to its child ads. You can also delete individual resources directly.
# Delete a single ad
meta ads ad delete <AD_ID> --force

# Delete an ad set (and its ads)
meta ads adset delete <AD_SET_ID> --force

# Delete an ad campaign (and all its ad sets and ads)
meta ads campaign delete <CAMPAIGN_ID> --force

# Delete an ad creative
meta ads creative delete <CREATIVE_ID> --force

Disconnect a dataset from an ad account

meta ads dataset disconnect <PIXEL_ID> --ad-account-id <AD_ACCOUNT_ID> --force

Delete a catalog

meta ads catalog delete <CATALOG_ID> --force