adloop 0.32.0__tar.gz → 0.32.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. {adloop-0.32.0 → adloop-0.32.1}/PKG-INFO +1 -1
  2. {adloop-0.32.0 → adloop-0.32.1}/pyproject.toml +1 -1
  3. {adloop-0.32.0 → adloop-0.32.1}/pyproject.toml.orig +1 -1
  4. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/merchant/read.py +11 -1
  5. {adloop-0.32.0 → adloop-0.32.1}/README.md +0 -0
  6. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/__init__.py +0 -0
  7. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/__main__.py +0 -0
  8. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/_mcp_patches.py +0 -0
  9. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/ads/__init__.py +0 -0
  10. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/ads/ai_max.py +0 -0
  11. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/ads/audiences.py +0 -0
  12. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/ads/brands.py +0 -0
  13. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/ads/client.py +0 -0
  14. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/ads/conversion_actions.py +0 -0
  15. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/ads/currency.py +0 -0
  16. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/ads/custom_conversion_goals.py +0 -0
  17. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/ads/enums.py +0 -0
  18. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/ads/forecast.py +0 -0
  19. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/ads/gaql.py +0 -0
  20. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/ads/image_fetch.py +0 -0
  21. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/ads/pmax.py +0 -0
  22. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/ads/read.py +0 -0
  23. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/ads/shopping.py +0 -0
  24. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/ads/validate_only.py +0 -0
  25. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/ads/write.py +0 -0
  26. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/auth.py +0 -0
  27. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/cli.py +0 -0
  28. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/config.py +0 -0
  29. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/crossref.py +0 -0
  30. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/diagnostics.py +0 -0
  31. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/ga4/__init__.py +0 -0
  32. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/ga4/client.py +0 -0
  33. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/ga4/reports.py +0 -0
  34. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/ga4/tracking.py +0 -0
  35. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/ga4/write.py +0 -0
  36. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/gsc/__init__.py +0 -0
  37. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/gsc/client.py +0 -0
  38. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/gsc/reports.py +0 -0
  39. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/gtm/__init__.py +0 -0
  40. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/gtm/client.py +0 -0
  41. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/gtm/entities.py +0 -0
  42. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/gtm/read.py +0 -0
  43. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/gtm/write.py +0 -0
  44. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/merchant/__init__.py +0 -0
  45. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/merchant/client.py +0 -0
  46. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/pagespeed.py +0 -0
  47. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/reddit/__init__.py +0 -0
  48. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/reddit/auth.py +0 -0
  49. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/reddit/client.py +0 -0
  50. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/reddit/read.py +0 -0
  51. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/reddit/schedule.py +0 -0
  52. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/reddit/write.py +0 -0
  53. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/rules/__init__.py +0 -0
  54. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/rules/adloop.md +0 -0
  55. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/rules/commands/analyze-performance.md +0 -0
  56. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/rules/commands/budget-plan.md +0 -0
  57. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/rules/commands/create-ad.md +0 -0
  58. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/rules/commands/create-campaign.md +0 -0
  59. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/rules/commands/diagnose-tracking.md +0 -0
  60. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/rules/commands/optimize-campaign.md +0 -0
  61. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/rules_install.py +0 -0
  62. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/runtime.py +0 -0
  63. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/safety/__init__.py +0 -0
  64. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/safety/approval.py +0 -0
  65. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/safety/approval_card.html +0 -0
  66. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/safety/audit.py +0 -0
  67. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/safety/guards.py +0 -0
  68. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/safety/preview.py +0 -0
  69. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/server.py +0 -0
  70. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/tracking.py +0 -0
  71. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/upload_card.html +0 -0
  72. {adloop-0.32.0 → adloop-0.32.1}/src/adloop/uploads.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: adloop
3
- Version: 0.32.0
3
+ Version: 0.32.1
4
4
  Summary: The AI command center for Google Ads, Reddit Ads, GA4, and tracking code.
5
5
  Keywords: mcp,google-ads,reddit-ads,google-analytics,ga4,cursor,marketing
6
6
  Author: Daniel Klose
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "adloop"
3
- version = "0.32.0"
3
+ version = "0.32.1"
4
4
  description = "The AI command center for Google Ads, Reddit Ads, GA4, and tracking code."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "adloop"
3
- version = "0.32.0"
3
+ version = "0.32.1"
4
4
  description = "The AI command center for Google Ads, Reddit Ads, GA4, and tracking code."
5
5
  readme = "README.md"
6
6
  authors = [
@@ -216,7 +216,17 @@ def get_merchant_feed_health(
216
216
  f"severity — CRITICAL means offers stop serving entirely: "
217
217
  + "; ".join(i["title"] for i in critical[:3])
218
218
  )
219
- if not account_issues and not totals["disapproved"]:
219
+ if not serving_total:
220
+ # Zero products is not a healthy feed: Shopping and Performance Max
221
+ # have nothing to advertise.
222
+ insights.append(
223
+ "The account has no products at all (0 approved, pending or "
224
+ "disapproved), so Shopping and Performance Max campaigns have "
225
+ "nothing to show. Either no feed or data source is set up yet, "
226
+ "products were added in the last ~30 minutes (status lags), or "
227
+ "the products live in another Merchant Center account."
228
+ )
229
+ elif not account_issues and not totals["disapproved"]:
220
230
  insights.append("No disapprovals or account issues — feed is healthy.")
221
231
 
222
232
  return {
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes