Skip to main content

A modern Python client for the Apple Search Ads API with full type safety and async support

Project description

ASA API Client

PyPI version Python License CI

A modern, fully-typed Python client for the Apple Search Ads API with async support and Pydantic models.

Features

  • Full Type Safety - Complete type hints with strict mypy compliance
  • Async Support - Both sync and async methods in a unified client
  • Pydantic Models - Validated request/response models
  • Resource-based API - Intuitive client.campaigns.list() pattern
  • Automatic Pagination - iter_all() and iter_all_async() helpers
  • Reports with Pandas - Optional DataFrame export

Installation

Using uv (recommended):

uv add asa-api-client

Using pip:

pip install asa-api-client

With pandas support:

uv add "asa-api-client[pandas]"
# or
pip install "asa-api-client[pandas]"

Quick Start

from asa_api_client import AppleSearchAdsClient

# From environment variables
client = AppleSearchAdsClient.from_env()

# Or explicit configuration
client = AppleSearchAdsClient(
    client_id="SEARCHADS.xxx",
    team_id="SEARCHADS.xxx",
    key_id="xxx",
    org_id=123456,
    private_key_path="private-key.pem",
)

# List campaigns
with client:
    campaigns = client.campaigns.list()
    for campaign in campaigns:
        print(f"{campaign.name}: {campaign.status}")

Environment Variables

export ASA_CLIENT_ID="SEARCHADS.your-client-id"
export ASA_TEAM_ID="SEARCHADS.your-team-id"
export ASA_KEY_ID="your-key-id"
export ASA_ORG_ID="123456"
export ASA_PRIVATE_KEY_PATH="/path/to/private-key.pem"

Or use a .env file:

ASA_CLIENT_ID=SEARCHADS.your-client-id
ASA_TEAM_ID=SEARCHADS.your-team-id
ASA_KEY_ID=your-key-id
ASA_ORG_ID=123456
ASA_PRIVATE_KEY_PATH=private-key.pem

Resources

Campaigns

# List all campaigns
campaigns = client.campaigns.list()

# Get a specific campaign
campaign = client.campaigns.get(campaign_id)

# Find with filters
from asa_api_client.models import Selector
enabled = client.campaigns.find(
    Selector().where("status", "==", "ENABLED")
)

# Create a campaign
from asa_api_client.models import CampaignCreate, Money, CampaignSupplySource
campaign = client.campaigns.create(
    CampaignCreate(
        name="My Campaign",
        adam_id=123456789,
        countries_or_regions=["US"],
        daily_budget_amount=Money(amount="100", currency="USD"),
        supply_sources=[CampaignSupplySource.APPSTORE_SEARCH_RESULTS],
    )
)

Ad Groups

# Access ad groups through campaign
ad_groups = client.campaigns(campaign_id).ad_groups.list()

# Create an ad group
from asa_api_client.models import AdGroupCreate
ad_group = client.campaigns(campaign_id).ad_groups.create(
    AdGroupCreate(
        name="My Ad Group",
        default_bid_amount=Money(amount="1.00", currency="USD"),
    )
)

Keywords

# List keywords in an ad group
keywords = client.campaigns(campaign_id).ad_groups(ad_group_id).keywords.list()

# Create keywords (bulk only)
from asa_api_client.models import KeywordCreate, KeywordMatchType
result = client.campaigns(campaign_id).ad_groups(ad_group_id).keywords.create_bulk([
    KeywordCreate(
        text="my keyword",
        match_type=KeywordMatchType.EXACT,
        bid_amount=Money(amount="1.50", currency="USD"),
    )
])

Reports

from datetime import date

# Campaign report
report = client.reports.campaigns(
    start_date=date(2024, 1, 1),
    end_date=date(2024, 1, 31),
)

# Convert to DataFrame (requires pandas)
df = report.to_dataframe()

Async Usage

import asyncio

async def main():
    client = AppleSearchAdsClient.from_env()

    async with client:
        campaigns = await client.campaigns.list_async()

        # Async iteration
        async for campaign in client.campaigns.iter_all_async():
            print(campaign.name)

asyncio.run(main())

CLI

For a command-line interface, install asa-api-cli:

uv tool install asa-api-cli
# or
pip install asa-api-cli

License

MIT License - Copyright (c) 2025 Peth Pty Ltd

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

asa_api_client-0.1.6.tar.gz (104.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

asa_api_client-0.1.6-py3-none-any.whl (49.7 kB view details)

Uploaded Python 3

File details

Details for the file asa_api_client-0.1.6.tar.gz.

File metadata

  • Download URL: asa_api_client-0.1.6.tar.gz
  • Upload date:
  • Size: 104.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for asa_api_client-0.1.6.tar.gz
Algorithm Hash digest
SHA256 c0b27d5d91d1ea4b775afb7291a5d974e53de3f9a02343864d7909430a5bface
MD5 65fe4057e85bd19a35c51ab012357203
BLAKE2b-256 cb3c6e4746ab9b9ae67b8bdc62247fa794f59721915550db3c284d45968ec506

See more details on using hashes here.

Provenance

The following attestation bundles were made for asa_api_client-0.1.6.tar.gz:

Publisher: publish.yml on SamPetherbridge/asa-api-client

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file asa_api_client-0.1.6-py3-none-any.whl.

File metadata

  • Download URL: asa_api_client-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 49.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for asa_api_client-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 0a478048247ebaca1d7439a6bff577943e02f0b525e9226c4736f6dcba7ea35f
MD5 8b745bf3991804a0da804315901dc24c
BLAKE2b-256 fb3233715fe700870397fb196699e4b06334c6ead28608f9822bb77abd56a7be

See more details on using hashes here.

Provenance

The following attestation bundles were made for asa_api_client-0.1.6-py3-none-any.whl:

Publisher: publish.yml on SamPetherbridge/asa-api-client

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page