google-playGoogle Play Developer API (Android Publisher) integration with managed OAuth. Manage apps, subscriptions, in-app purchases, and reviews. Use this skill when users want to interact with Google Play Console programmatically. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway).
Install via ClawdBot CLI:
clawdbot install byungkyu/google-playAccess the Google Play Developer API (Android Publisher) with managed OAuth authentication. Manage app listings, subscriptions, in-app purchases, reviews, and more.
# List in-app products
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/google-play/androidpublisher/v3/applications/{packageName}/inappproducts')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
https://gateway.maton.ai/google-play/{native-api-path}
Replace {native-api-path} with the actual Android Publisher API endpoint path. The gateway proxies requests to androidpublisher.googleapis.com and automatically injects your OAuth token.
All requests require the Maton API key in the Authorization header:
Authorization: Bearer $MATON_API_KEY
Environment Variable: Set your API key as MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"
Manage your Google OAuth connections at https://ctrl.maton.ai.
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=google-play&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'google-play'}).encode()
req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"connection": {
"connection_id": "21fd90f9-5935-43cd-b6c8-bde9d915ca80",
"status": "ACTIVE",
"creation_time": "2025-12-08T07:20:53.488460Z",
"last_updated_time": "2026-01-31T20:03:32.593153Z",
"url": "https://connect.maton.ai/?session_token=...",
"app": "google-play",
"metadata": {}
}
}
Open the returned url in a browser to complete OAuth authorization.
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
If you have multiple Google Play connections, specify which one to use with the Maton-Connection header:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/google-play/androidpublisher/v3/applications/{packageName}/inappproducts')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '21fd90f9-5935-43cd-b6c8-bde9d915ca80')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
If omitted, the gateway uses the default (oldest) active connection.
GET /google-play/androidpublisher/v3/applications/{packageName}/inappproducts
GET /google-play/androidpublisher/v3/applications/{packageName}/inappproducts/{sku}
POST /google-play/androidpublisher/v3/applications/{packageName}/inappproducts
Content-Type: application/json
{
"packageName": "com.example.app",
"sku": "premium_upgrade",
"status": "active",
"purchaseType": "managedUser",
"defaultPrice": {
"priceMicros": "990000",
"currency": "USD"
},
"listings": {
"en-US": {
"title": "Premium Upgrade",
"description": "Unlock all premium features"
}
}
}
PUT /google-play/androidpublisher/v3/applications/{packageName}/inappproducts/{sku}
Content-Type: application/json
{
"packageName": "com.example.app",
"sku": "premium_upgrade",
"status": "active",
"purchaseType": "managedUser",
"defaultPrice": {
"priceMicros": "1990000",
"currency": "USD"
}
}
DELETE /google-play/androidpublisher/v3/applications/{packageName}/inappproducts/{sku}
GET /google-play/androidpublisher/v3/applications/{packageName}/subscriptions
GET /google-play/androidpublisher/v3/applications/{packageName}/subscriptions/{productId}
POST /google-play/androidpublisher/v3/applications/{packageName}/subscriptions
Content-Type: application/json
{
"productId": "monthly_premium",
"basePlans": [
{
"basePlanId": "p1m",
"autoRenewingBasePlanType": {
"billingPeriodDuration": "P1M"
}
}
],
"listings": [
{
"languageCode": "en-US",
"title": "Premium Monthly"
}
]
}
GET /google-play/androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{token}
POST /google-play/androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{token}:acknowledge
Content-Type: application/json
{
"developerPayload": "optional payload"
}
GET /google-play/androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}
POST /google-play/androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:cancel
POST /google-play/androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:refund
GET /google-play/androidpublisher/v3/applications/{packageName}/reviews
GET /google-play/androidpublisher/v3/applications/{packageName}/reviews/{reviewId}
POST /google-play/androidpublisher/v3/applications/{packageName}/reviews/{reviewId}:reply
Content-Type: application/json
{
"replyText": "Thank you for your feedback!"
}
POST /google-play/androidpublisher/v3/applications/{packageName}/edits
GET /google-play/androidpublisher/v3/applications/{packageName}/edits/{editId}
POST /google-play/androidpublisher/v3/applications/{packageName}/edits/{editId}:commit
DELETE /google-play/androidpublisher/v3/applications/{packageName}/edits/{editId}
// List in-app products
const packageName = 'com.example.app';
const response = await fetch(
`https://gateway.maton.ai/google-play/androidpublisher/v3/applications/${packageName}/inappproducts`,
{
headers: {
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
}
}
);
const products = await response.json();
console.log(products);
import os
import requests
headers = {'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}
package_name = 'com.example.app'
# List in-app products
response = requests.get(
f'https://gateway.maton.ai/google-play/androidpublisher/v3/applications/{package_name}/inappproducts',
headers=headers
)
products = response.json()
print(products)
{packageName} with your app's package name (e.g., com.example.app)curl -g when URLs contain brackets (fields[], sort[], records[]) to disable glob parsingjq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments. You may get "Invalid API key" errors when piping.| Status | Meaning |
|--------|---------|
| 400 | Missing Google Play connection |
| 401 | Invalid or missing Maton API key |
| 404 | Package not found or no access |
| 429 | Rate limited (10 req/sec per account) |
| 4xx/5xx | Passthrough error from Google Play API |
MATON_API_KEY environment variable is set:echo $MATON_API_KEY
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
google-play. For example:https://gateway.maton.ai/google-play/androidpublisher/v3/applications/{packageName}/inappproductshttps://gateway.maton.ai/androidpublisher/v3/applications/{packageName}/inappproductsGenerated Mar 1, 2026
A mobile app developer uses this skill to programmatically manage in-app products and subscriptions across multiple apps in the Google Play Console. They automate updates to pricing, descriptions, and statuses, ensuring consistent monetization strategies without manual UI navigation.
A SaaS company integrates this skill to pull subscription data from Google Play for analytics dashboards. They track active subscriptions, renewal rates, and revenue trends to inform marketing campaigns and product decisions.
A customer support team leverages this skill to fetch and analyze user reviews from the Google Play Store. They automate alerts for negative feedback and streamline response workflows to improve app ratings and user satisfaction.
A digital marketing agency uses this skill to manage Google Play listings for multiple client apps from a single interface. They handle in-app product setups, subscription configurations, and connection management efficiently across different accounts.
An e-commerce platform integrates this skill to sync in-app product catalogs from Google Play with their backend systems. They automate inventory updates and pricing adjustments based on real-time sales data and promotions.
Businesses generate recurring revenue by offering subscription plans through in-app purchases. This skill enables automated management of subscription tiers, pricing updates, and lifecycle tracking to maximize retention and upsell opportunities.
Companies offer free apps with premium features unlocked via one-time or consumable in-app purchases. This skill helps manage product SKUs, pricing strategies, and promotional discounts to drive conversion from free to paid users.
Agencies provide managed services for app developers, handling Google Play Console operations like monetization setup and review management. This skill allows scalable automation across multiple client accounts, billed as a retainer or project fee.
💬 Integration Tip
Ensure the MATON_API_KEY is securely stored as an environment variable and use the Maton-Connection header to manage multiple Google Play accounts efficiently.
Use the mcporter CLI to list, configure, auth, and call MCP servers/tools directly (HTTP or stdio), including ad-hoc servers, config edits, and CLI/type generation.
Connect to 100+ APIs (Google Workspace, Microsoft 365, GitHub, Notion, Slack, Airtable, HubSpot, etc.) with managed OAuth. Use this skill when users want to...
Build, debug, and deploy websites using HTML, CSS, JavaScript, and modern frameworks following production best practices.
YouTube Data API integration with managed OAuth. Search videos, manage playlists, access channel data, and interact with comments. Use this skill when users want to interact with YouTube. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway).
Scaffold, test, document, and debug REST and GraphQL APIs. Use when the user needs to create API endpoints, write integration tests, generate OpenAPI specs, test with curl, mock APIs, or troubleshoot HTTP issues.
Search for jobs across LinkedIn, Indeed, Glassdoor, ZipRecruiter, Google Jobs, Bayt, Naukri, and BDJobs using the JobSpy MCP server.