Skip to main content

RETL Microsoft Advertising Destination

condor-retl-bing-ads is the first-party Microsoft Advertising destination connector package for RETL State contracts. It exposes retl/bing-ads through the retl.destinations entry point group.

Surface

  • customer_lists accepts targeted State Operations and sends Microsoft Advertising Campaign Management API v13 ApplyCustomerListUserData requests to add or remove Customer Match users from Customer List audiences. It accepts email, phone_e164, and mobile_advertising_id Identifiers and requires at least one of those accepted types.

The surface supports managed targets. When a State row emits a logical target that is not mapped or already present in the runtime Target Registry, the connector calls GetAudiencesByIds with Type=CustomerList and empty AudienceIds to inspect account and customer scoped Customer List audiences. For REST JSON the connector sends AudienceIds as null, because the live REST endpoint accepts null or an omitted field but rejects an empty JSON array, then creates a missing target through AddAudiences with Type=CustomerList. Dry runs may perform the read-only lookup, but do not create audiences or write Target Registry rows.

The surface uses custom microsoft_advertising auth with access_token and developer_token credential fields. Request planning remains auth-free and secret-free; runtime submission adds Authorization, DeveloperToken, CustomerAccountId, and CustomerId headers after secret resolution.

Identifier Rendering

email and phone_e164 values are lowercased and SHA-256 hashed unless the input is already a 64-character hexadecimal SHA-256 value, in which case it is trimmed, preserved, and lowercased. mobile_advertising_id is trimmed and sent unhashed. Microsoft accepts one CustomerListItemSubType per request, so RETL partitions batches by target, operation, and identifier subtype.

Binding Config

Required config:

  • customer_account_id: the ad account id used in Microsoft Advertising request headers and as the default parent for account-scoped managed targets.
  • customer_id: the manager customer id used in request headers and as the parent for customer-scoped managed targets.

Optional config:

  • api_version defaults to v13 and is pinned to that value.
  • target_scope defaults to Account and may be set to Customer for managed Customer List creation.
  • membership_duration defaults to -1; Microsoft allows 1 through 390 or -1 for no expiration. Namespace-loaded public config may provide this as -1 or "-1".
  • accept_customer_match_terms defaults to True and is sent as AcceptCustomerMatchTerm on each membership upload. Namespace-loaded public config may provide this as true, false, "true", or "false".
  • transport may be injected for offline tests. When omitted, non-dry-run submissions use the connector's requests transport.

The connector owns the production API origin https://campaign.api.bingads.microsoft.com in package code. Tests use injected transports to capture requests without changing that origin.

The namespace-loadable public config fields are customer_account_id, customer_id, api_version, target_scope, membership_duration, and accept_customer_match_terms.

destination = retl.destinations.load(
    "retl/bing-ads",
    binding_name="bing_ads_primary",
    credential_namespace="destinations.bing_ads",
    config_namespace="destinations.bing_ads",
)

The credential namespace creates retl.secrets["destinations.bing_ads.access_token"] and retl.secrets["destinations.bing_ads.developer_token"] without resolving those secrets during binding construction.

Microsoft API References

Implementation decisions were checked against Microsoft Learn on 2026-05-13:

Proof Level

Default tests provide contract proof for connector metadata, namespace loading, config validation, Customer List request rendering, hashed identifier handling, managed target lookup/create, runtime Target Registry reuse, response classification, selected request-plan submission, and transport failure handling.

Sandbox

Live sandbox tests are opt-in and read credentials from local/env/.env.bing_ads-sandbox when present:

make test-sandbox-bing-ads

The sandbox test creates a disposable managed Customer List audience through AddAudiences, submits one synthetic email add and remove through ApplyCustomerListUserData, and then deletes the disposable list through DeleteAudiences. It does not require a pre-existing Customer List. The test requires:

  • DESTINATIONS__BING_ADS__ACCESS_TOKEN, or both DESTINATIONS__BING_ADS__CLIENT_ID and DESTINATIONS__BING_ADS__REFRESH_TOKEN
  • DESTINATIONS__BING_ADS__DEVELOPER_TOKEN
  • DESTINATIONS__BING_ADS__CUSTOMER_ACCOUNT_ID
  • DESTINATIONS__BING_ADS__CUSTOMER_ID

Optional sandbox config:

  • DESTINATIONS__BING_ADS__API_VERSION
  • DESTINATIONS__BING_ADS__ACCEPT_CUSTOMER_MATCH_TERMS

Metadata

Release files for condor-retl-bing-ads 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for condor-retl-bing-ads 0.1.0
File Size Uploaded
condor_retl_bing_ads-0.1.0.tar.gz 21.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for condor-retl-bing-ads 0.1.0
File Interpreter ABI Platform
condor_retl_bing_ads-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 38.9 kB

Release files / condor_retl_bing_ads-0.1.0.tar.gz

Download URL condor_retl_bing_ads-0.1.0.tar.gz
Size 21.0 kB
Tags Source
SHA-256 checksum
How to use checksums
ef0f03aa41c8739ca189e3b41ddfd7d5b2b04f825feadad375ea428a25169133
BLAKE2b-256 checksum
How to use checksums
dd8136eaba0751ec1ca10fa8719cc7cb6fdcf540fafb10549567c2291575a2e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 18, 2026.

Transparency log

Release files / condor_retl_bing_ads-0.1.0-py3-none-any.whl

Download URL condor_retl_bing_ads-0.1.0-py3-none-any.whl
Size 17.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
52e905ffbf3960e2fb2d647e60cb103592a57818acc0c95c0225c1e8f2b44f3e
BLAKE2b-256 checksum
How to use checksums
c5c224f0c16edcd9e81ae097c1e3070e277308f8a8916b3d1454848018d6e726
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 18, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page