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_listsaccepts targeted State Operations and sends Microsoft Advertising Campaign Management API v13ApplyCustomerListUserDatarequests to add or remove Customer Match users from Customer List audiences. It acceptsemail,phone_e164, andmobile_advertising_idIdentifiers 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_versiondefaults tov13and is pinned to that value.target_scopedefaults toAccountand may be set toCustomerfor managed Customer List creation.membership_durationdefaults to-1; Microsoft allows1through390or-1for no expiration. Namespace-loaded public config may provide this as-1or"-1".accept_customer_match_termsdefaults toTrueand is sent asAcceptCustomerMatchTermon each membership upload. Namespace-loaded public config may provide this astrue,false,"true", or"false".transportmay be injected for offline tests. When omitted, non-dry-run submissions use the connector'srequeststransport.
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:
- Campaign Management API v13
ApplyCustomerListUserDataREST JSON: https://learn.microsoft.com/en-us/advertising/campaign-management-service/applycustomerlistuserdata?view=bingads-13 - Campaign Management API v13
CustomerListobject: https://learn.microsoft.com/en-us/advertising/campaign-management-service/customerlist?view=bingads-13 - Campaign Management API v13
AddAudiencesREST JSON: https://learn.microsoft.com/en-us/advertising/campaign-management-service/addaudiences?view=bingads-13 - Campaign Management API v13
GetAudiencesByIdsREST JSON: https://learn.microsoft.com/en-us/advertising/campaign-management-service/getaudiencesbyids?view=bingads-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 bothDESTINATIONS__BING_ADS__CLIENT_IDandDESTINATIONS__BING_ADS__REFRESH_TOKENDESTINATIONS__BING_ADS__DEVELOPER_TOKENDESTINATIONS__BING_ADS__CUSTOMER_ACCOUNT_IDDESTINATIONS__BING_ADS__CUSTOMER_ID
Optional sandbox config:
DESTINATIONS__BING_ADS__API_VERSIONDESTINATIONS__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)
| File | Size | Uploaded | |
|---|---|---|---|
| condor_retl_bing_ads-0.1.0.tar.gz | 21.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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