Google Shopping Merchant Conversions API client library for managing conversion sources and tracking.
82
The ConversionSourcesService provides complete management of conversion sources for merchant accounts. It supports both synchronous and asynchronous clients with full CRUD operations, pagination, and comprehensive error handling.
from google.shopping import merchant_conversions_v1
from google.oauth2 import service_account
# Default credentials (ADC)
client = merchant_conversions_v1.ConversionSourcesServiceClient()
# Service account credentials
credentials = service_account.Credentials.from_service_account_file("credentials.json")
client = merchant_conversions_v1.ConversionSourcesServiceClient(credentials=credentials)
# Async client
async_client = merchant_conversions_v1.ConversionSourcesServiceAsyncClient()Creates a new conversion source for a merchant account.
def create_conversion_source(
self,
request: CreateConversionSourceRequest = None,
*,
parent: str = None,
conversion_source: ConversionSource = None,
retry: OptionalRetry = gapic_v1.method.DEFAULT,
timeout: float = None,
metadata: Sequence[Tuple[str, str]] = ()
) -> ConversionSource: ...
# Async version
async def create_conversion_source(
self,
request: CreateConversionSourceRequest = None,
*,
parent: str = None,
conversion_source: ConversionSource = None,
retry: OptionalRetry = gapic_v1.method.DEFAULT,
timeout: float = None,
metadata: Sequence[Tuple[str, str]] = ()
) -> ConversionSource: ...Parameters:
request: The request object containing parent and conversion_sourceparent: Required. The account where the conversion source will be created. Format: accounts/{account}conversion_source: Required. The conversion source to createretry: Retry configurationtimeout: Request timeout in secondsmetadata: Additional metadata for the requestReturns: The created ConversionSource object
Usage Example:
from google.shopping import merchant_conversions_v1
client = merchant_conversions_v1.ConversionSourcesServiceClient()
# Create Google Analytics conversion source
ga_link = merchant_conversions_v1.GoogleAnalyticsLink(
property_id=123456789,
attribution_settings=merchant_conversions_v1.AttributionSettings(
attribution_lookback_window_days=30,
attribution_model=merchant_conversions_v1.AttributionSettings.AttributionModel.CROSS_CHANNEL_LAST_CLICK
)
)
conversion_source = merchant_conversions_v1.ConversionSource(
google_analytics_link=ga_link
)
request = merchant_conversions_v1.CreateConversionSourceRequest(
parent="accounts/123456789",
conversion_source=conversion_source
)
response = client.create_conversion_source(request=request)
print(f"Created conversion source: {response.name}")Updates an existing conversion source.
def update_conversion_source(
self,
request: UpdateConversionSourceRequest = None,
*,
conversion_source: ConversionSource = None,
update_mask: field_mask_pb2.FieldMask = None,
retry: OptionalRetry = gapic_v1.method.DEFAULT,
timeout: float = None,
metadata: Sequence[Tuple[str, str]] = ()
) -> ConversionSource: ...
# Async version
async def update_conversion_source(
self,
request: UpdateConversionSourceRequest = None,
*,
conversion_source: ConversionSource = None,
update_mask: field_mask_pb2.FieldMask = None,
retry: OptionalRetry = gapic_v1.method.DEFAULT,
timeout: float = None,
metadata: Sequence[Tuple[str, str]] = ()
) -> ConversionSource: ...Parameters:
request: The request object containing conversion_source and update_maskconversion_source: Required. The conversion source to updateupdate_mask: Required. List of fields to be updatedretry: Retry configurationtimeout: Request timeout in secondsmetadata: Additional metadata for the requestReturns: The updated ConversionSource object
Deletes (archives) a conversion source. The source will be archived for 30 days before permanent deletion.
def delete_conversion_source(
self,
request: DeleteConversionSourceRequest = None,
*,
name: str = None,
retry: OptionalRetry = gapic_v1.method.DEFAULT,
timeout: float = None,
metadata: Sequence[Tuple[str, str]] = ()
) -> None: ...
# Async version
async def delete_conversion_source(
self,
request: DeleteConversionSourceRequest = None,
*,
name: str = None,
retry: OptionalRetry = gapic_v1.method.DEFAULT,
timeout: float = None,
metadata: Sequence[Tuple[str, str]] = ()
) -> None: ...Parameters:
request: The request object containing namename: Required. The name of the conversion source to delete. Format: accounts/{account}/conversionSources/{conversion_source}retry: Retry configurationtimeout: Request timeout in secondsmetadata: Additional metadata for the requestReturns: None
Restores an archived conversion source within the 30-day recovery window.
def undelete_conversion_source(
self,
request: UndeleteConversionSourceRequest = None,
*,
name: str = None,
retry: OptionalRetry = gapic_v1.method.DEFAULT,
timeout: float = None,
metadata: Sequence[Tuple[str, str]] = ()
) -> ConversionSource: ...
# Async version
async def undelete_conversion_source(
self,
request: UndeleteConversionSourceRequest = None,
*,
name: str = None,
retry: OptionalRetry = gapic_v1.method.DEFAULT,
timeout: float = None,
metadata: Sequence[Tuple[str, str]] = ()
) -> ConversionSource: ...Parameters:
request: The request object containing namename: Required. The name of the conversion source to undelete. Format: accounts/{account}/conversionSources/{conversion_source}retry: Retry configurationtimeout: Request timeout in secondsmetadata: Additional metadata for the requestReturns: The restored ConversionSource object
Retrieves a specific conversion source by its resource name.
def get_conversion_source(
self,
request: GetConversionSourceRequest = None,
*,
name: str = None,
retry: OptionalRetry = gapic_v1.method.DEFAULT,
timeout: float = None,
metadata: Sequence[Tuple[str, str]] = ()
) -> ConversionSource: ...
# Async version
async def get_conversion_source(
self,
request: GetConversionSourceRequest = None,
*,
name: str = None,
retry: OptionalRetry = gapic_v1.method.DEFAULT,
timeout: float = None,
metadata: Sequence[Tuple[str, str]] = ()
) -> ConversionSource: ...Parameters:
request: The request object containing namename: Required. The name of the conversion source to retrieve. Format: accounts/{account}/conversionSources/{conversion_source}retry: Retry configurationtimeout: Request timeout in secondsmetadata: Additional metadata for the requestReturns: The requested ConversionSource object
Lists conversion sources for a merchant account with pagination support.
def list_conversion_sources(
self,
request: ListConversionSourcesRequest = None,
*,
parent: str = None,
retry: OptionalRetry = gapic_v1.method.DEFAULT,
timeout: float = None,
metadata: Sequence[Tuple[str, str]] = ()
) -> pagers.ListConversionSourcesPager: ...
# Async version
async def list_conversion_sources(
self,
request: ListConversionSourcesRequest = None,
*,
parent: str = None,
retry: OptionalRetry = gapic_v1.method.DEFAULT,
timeout: float = None,
metadata: Sequence[Tuple[str, str]] = ()
) -> pagers.ListConversionSourcesAsyncPager: ...Parameters:
request: The request object containing parent, page_size, page_token, and show_deletedparent: Required. The account to list conversion sources for. Format: accounts/{account}retry: Retry configurationtimeout: Request timeout in secondsmetadata: Additional metadata for the requestReturns: A pager object for iterating through the results
Usage Example:
from google.shopping import merchant_conversions_v1
client = merchant_conversions_v1.ConversionSourcesServiceClient()
# List with pagination
request = merchant_conversions_v1.ListConversionSourcesRequest(
parent="accounts/123456789",
page_size=10,
show_deleted=False
)
# Iterate through all results (auto-pagination)
for conversion_source in client.list_conversion_sources(request=request):
print(f"Name: {conversion_source.name}")
print(f"State: {conversion_source.state}")
if conversion_source.google_analytics_link:
print(f"GA Property ID: {conversion_source.google_analytics_link.property_id}")
# Manual pagination
response = client.list_conversion_sources(request=request)
for conversion_source in response.conversion_sources:
print(f"Processing: {conversion_source.name}")
# Get next page if available
if response.next_page_token:
next_request = merchant_conversions_v1.ListConversionSourcesRequest(
parent="accounts/123456789",
page_token=response.next_page_token
)
next_response = client.list_conversion_sources(request=next_request)Common exceptions when working with the ConversionSourcesService:
from google.api_core import exceptions
from google.shopping import merchant_conversions_v1
client = merchant_conversions_v1.ConversionSourcesServiceClient()
try:
request = merchant_conversions_v1.GetConversionSourceRequest(
name="accounts/123/conversionSources/invalid"
)
response = client.get_conversion_source(request=request)
except exceptions.NotFound as e:
print(f"Conversion source not found: {e}")
except exceptions.PermissionDenied as e:
print(f"Access denied: {e}")
except exceptions.InvalidArgument as e:
print(f"Invalid request: {e}")
except exceptions.ResourceExhausted as e:
print(f"Quota exceeded: {e}")
except exceptions.GoogleAPICallError as e:
print(f"API call failed: {e}")from google.shopping import merchant_conversions_v1
# Automatic resource cleanup
with merchant_conversions_v1.ConversionSourcesServiceClient() as client:
request = merchant_conversions_v1.ListConversionSourcesRequest(
parent="accounts/123456789"
)
response = client.list_conversion_sources(request=request)
for source in response.conversion_sources:
print(f"Processing: {source.name}")Install with Tessl CLI
npx tessl i tessl/pypi-google-shopping-merchant-conversionsevals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
scenario-7
scenario-8
scenario-9
scenario-10