spaceads-os 0.3.0__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 (316) hide show
  1. spaceads_os-0.3.0/LICENSE +81 -0
  2. spaceads_os-0.3.0/PKG-INFO +335 -0
  3. spaceads_os-0.3.0/README.md +188 -0
  4. spaceads_os-0.3.0/pyproject.toml +105 -0
  5. spaceads_os-0.3.0/setup.cfg +4 -0
  6. spaceads_os-0.3.0/src/spaceads_os/__init__.py +4 -0
  7. spaceads_os-0.3.0/src/spaceads_os/_scaffold/CLAUDE.md +148 -0
  8. spaceads_os-0.3.0/src/spaceads_os/_scaffold/__init__.py +91 -0
  9. spaceads_os-0.3.0/src/spaceads_os/_scaffold/agents/brand-extractor.md +147 -0
  10. spaceads_os-0.3.0/src/spaceads_os/_scaffold/agents/creative-director.md +160 -0
  11. spaceads_os-0.3.0/src/spaceads_os/_scaffold/agents/mutation-reviewer.md +96 -0
  12. spaceads_os-0.3.0/src/spaceads_os/_scaffold/agents/onboarding-coach.md +131 -0
  13. spaceads_os-0.3.0/src/spaceads_os/_scaffold/agents/report-builder.md +95 -0
  14. spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-agency.md +43 -0
  15. spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-brand.md +91 -0
  16. spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-brief.md +50 -0
  17. spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-bucketing.md +135 -0
  18. spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-cadence.md +87 -0
  19. spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-changes.md +77 -0
  20. spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-check.md +51 -0
  21. spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-client.md +76 -0
  22. spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-create.md +87 -0
  23. spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-creative.md +151 -0
  24. spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-ga4.md +45 -0
  25. spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-geo.md +82 -0
  26. spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-grow.md +159 -0
  27. spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-intel.md +87 -0
  28. spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-keyword-research.md +79 -0
  29. spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-modify.md +258 -0
  30. spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-monitor.md +76 -0
  31. spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-onboard.md +194 -0
  32. spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-overview.md +39 -0
  33. spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-report.md +177 -0
  34. spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-seasonal.md +96 -0
  35. spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-strategy.md +86 -0
  36. spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-whitelabel.md +81 -0
  37. spaceads_os-0.3.0/src/spaceads_os/_scaffold/settings.json +30 -0
  38. spaceads_os-0.3.0/src/spaceads_os/_setup_wizard.py +817 -0
  39. spaceads_os-0.3.0/src/spaceads_os/audit/__init__.py +13 -0
  40. spaceads_os-0.3.0/src/spaceads_os/audit/upstream.py +140 -0
  41. spaceads_os-0.3.0/src/spaceads_os/brand/__init__.py +50 -0
  42. spaceads_os-0.3.0/src/spaceads_os/brand/__main__.py +187 -0
  43. spaceads_os-0.3.0/src/spaceads_os/brand/schema.py +105 -0
  44. spaceads_os-0.3.0/src/spaceads_os/brand/scraper.py +509 -0
  45. spaceads_os-0.3.0/src/spaceads_os/brand/store.py +208 -0
  46. spaceads_os-0.3.0/src/spaceads_os/brand/validator.py +123 -0
  47. spaceads_os-0.3.0/src/spaceads_os/cli.py +114 -0
  48. spaceads_os-0.3.0/src/spaceads_os/context/__init__.py +23 -0
  49. spaceads_os-0.3.0/src/spaceads_os/context/brief_loader.py +277 -0
  50. spaceads_os-0.3.0/src/spaceads_os/creative/__init__.py +42 -0
  51. spaceads_os-0.3.0/src/spaceads_os/creative/__main__.py +283 -0
  52. spaceads_os-0.3.0/src/spaceads_os/creative/brief_generator.py +314 -0
  53. spaceads_os-0.3.0/src/spaceads_os/creative/exporter.py +113 -0
  54. spaceads_os-0.3.0/src/spaceads_os/creative/specs.py +654 -0
  55. spaceads_os-0.3.0/src/spaceads_os/creative/wireframe.py +303 -0
  56. spaceads_os-0.3.0/src/spaceads_os/credentials.py +182 -0
  57. spaceads_os-0.3.0/src/spaceads_os/ga4/__init__.py +301 -0
  58. spaceads_os-0.3.0/src/spaceads_os/ga4/auth.py +176 -0
  59. spaceads_os-0.3.0/src/spaceads_os/ga4/client.py +430 -0
  60. spaceads_os-0.3.0/src/spaceads_os/ga4/scripts/__init__.py +4 -0
  61. spaceads_os-0.3.0/src/spaceads_os/ga4/scripts/conversion_event_audit.py +206 -0
  62. spaceads_os-0.3.0/src/spaceads_os/ga4/scripts/cross_device_attribution.py +167 -0
  63. spaceads_os-0.3.0/src/spaceads_os/ga4/scripts/custom_definitions_audit.py +160 -0
  64. spaceads_os-0.3.0/src/spaceads_os/ga4/scripts/data_quality_check.py +176 -0
  65. spaceads_os-0.3.0/src/spaceads_os/ga4/scripts/ecommerce_audit.py +215 -0
  66. spaceads_os-0.3.0/src/spaceads_os/ga4/scripts/full_audit.py +151 -0
  67. spaceads_os-0.3.0/src/spaceads_os/ga4/scripts/landing_page_quality.py +157 -0
  68. spaceads_os-0.3.0/src/spaceads_os/ga4/scripts/quick_check.py +183 -0
  69. spaceads_os-0.3.0/src/spaceads_os/ga4/scripts/traffic_source_analysis.py +217 -0
  70. spaceads_os-0.3.0/src/spaceads_os/google_ads/__init__.py +60 -0
  71. spaceads_os-0.3.0/src/spaceads_os/google_ads/account_config.py +148 -0
  72. spaceads_os-0.3.0/src/spaceads_os/google_ads/cache.py +224 -0
  73. spaceads_os-0.3.0/src/spaceads_os/google_ads/cadence.py +341 -0
  74. spaceads_os-0.3.0/src/spaceads_os/google_ads/client.py +220 -0
  75. spaceads_os-0.3.0/src/spaceads_os/google_ads/experiments.py +249 -0
  76. spaceads_os-0.3.0/src/spaceads_os/google_ads/feed_title_locales.py +77 -0
  77. spaceads_os-0.3.0/src/spaceads_os/google_ads/ga4_helper.py +711 -0
  78. spaceads_os-0.3.0/src/spaceads_os/google_ads/gaql_validator.py +204 -0
  79. spaceads_os-0.3.0/src/spaceads_os/google_ads/intel.py +382 -0
  80. spaceads_os-0.3.0/src/spaceads_os/google_ads/landing_page_locales.py +116 -0
  81. spaceads_os-0.3.0/src/spaceads_os/google_ads/merchant_center.py +438 -0
  82. spaceads_os-0.3.0/src/spaceads_os/google_ads/mutations.py +3142 -0
  83. spaceads_os-0.3.0/src/spaceads_os/google_ads/safety.py +1023 -0
  84. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/__init__.py +0 -0
  85. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/account_info.py +124 -0
  86. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/account_settings_check.py +178 -0
  87. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/action_items.py +122 -0
  88. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/ad_text_manager.py +150 -0
  89. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/add_negatives.py +206 -0
  90. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/add_shared_negatives.py +84 -0
  91. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/alert_check.py +1276 -0
  92. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/auction_insights.py +127 -0
  93. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/audience_audit.py +110 -0
  94. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/bestseller_gap_analysis.py +552 -0
  95. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/brand_demand_analysis.py +102 -0
  96. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/bucketing.py +455 -0
  97. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/budget_pacing.py +199 -0
  98. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/bulk_operations.py +93 -0
  99. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/cadence_status.py +330 -0
  100. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/campaign_watchdog.py +109 -0
  101. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/cart_data_analysis.py +247 -0
  102. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/change_history.py +494 -0
  103. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/check_ad_texts.py +21 -0
  104. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/check_audiences.py +77 -0
  105. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/condensed_check.py +1644 -0
  106. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/create_conversions.py +265 -0
  107. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/cvr_responsibility.py +106 -0
  108. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/daily_digest.py +165 -0
  109. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/dashboard_html.py +97 -0
  110. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/deep_diagnosis.py +139 -0
  111. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/device_performance.py +991 -0
  112. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/exclude_products.py +120 -0
  113. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/experiment_stats.py +159 -0
  114. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/export_sheets.py +89 -0
  115. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/feed_optimizer.py +1269 -0
  116. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/feed_title_optimizer.py +921 -0
  117. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/fix_destination_not_working.py +86 -0
  118. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/frequency_reach.py +238 -0
  119. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/full_audit.py +1352 -0
  120. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/generate_pdf.py +63 -0
  121. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/geo_analysis.py +1178 -0
  122. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/grow_audit.py +534 -0
  123. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/intel_digest.py +374 -0
  124. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/intel_fetch.py +436 -0
  125. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/keyword_planner.py +121 -0
  126. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/landing_page_check.py +1455 -0
  127. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/lower_troas_search.py +120 -0
  128. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/mc_diagnostics.py +338 -0
  129. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/mom_performance.py +121 -0
  130. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/monthly_review.py +150 -0
  131. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/pmax_channel_performance.py +802 -0
  132. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/product_analysis.py +445 -0
  133. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/quick_check.py +165 -0
  134. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/rules_engine.py +102 -0
  135. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/search_terms_analyzer.py +972 -0
  136. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/seasonal_check.py +439 -0
  137. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/seasonal_setup.py +234 -0
  138. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/set_bestseller_listing_groups.py +502 -0
  139. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/slack_formatter.py +55 -0
  140. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/spam_placements.py +99 -0
  141. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/swap_headline.py +25 -0
  142. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/switch_to_max_conv_value.py +28 -0
  143. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/unlink_headline.py +22 -0
  144. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/update_bidding_strategy.py +95 -0
  145. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/update_budget.py +151 -0
  146. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/update_geo_targeting.py +65 -0
  147. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/update_troas.py +161 -0
  148. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/website_scanner.py +139 -0
  149. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/weekly_digest.py +172 -0
  150. spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/yoy_compare.py +95 -0
  151. spaceads_os-0.3.0/src/spaceads_os/google_ads/seasonal.py +363 -0
  152. spaceads_os-0.3.0/src/spaceads_os/google_ads/utils.py +98 -0
  153. spaceads_os-0.3.0/src/spaceads_os/knowledge/README.md +125 -0
  154. spaceads_os-0.3.0/src/spaceads_os/knowledge/__init__.py +9 -0
  155. spaceads_os-0.3.0/src/spaceads_os/knowledge/analytics/ga4.md +212 -0
  156. spaceads_os-0.3.0/src/spaceads_os/knowledge/analytics/gtm.md +163 -0
  157. spaceads_os-0.3.0/src/spaceads_os/knowledge/analytics/merchant_center.md +159 -0
  158. spaceads_os-0.3.0/src/spaceads_os/knowledge/cadence_defaults.yaml +62 -0
  159. spaceads_os-0.3.0/src/spaceads_os/knowledge/channels/google_ads.md +222 -0
  160. spaceads_os-0.3.0/src/spaceads_os/knowledge/channels/meta_ads.md +273 -0
  161. spaceads_os-0.3.0/src/spaceads_os/knowledge/channels/tiktok_ads.md +443 -0
  162. spaceads_os-0.3.0/src/spaceads_os/knowledge/concepts/attribution_windows.md +63 -0
  163. spaceads_os-0.3.0/src/spaceads_os/knowledge/concepts/blended_roas.md +66 -0
  164. spaceads_os-0.3.0/src/spaceads_os/knowledge/concepts/budget_bands.md +99 -0
  165. spaceads_os-0.3.0/src/spaceads_os/knowledge/concepts/consent_privacy_att.md +71 -0
  166. spaceads_os-0.3.0/src/spaceads_os/knowledge/concepts/creative_specs.md +95 -0
  167. spaceads_os-0.3.0/src/spaceads_os/knowledge/concepts/creative_testing.md +77 -0
  168. spaceads_os-0.3.0/src/spaceads_os/knowledge/concepts/learning_phase.md +73 -0
  169. spaceads_os-0.3.0/src/spaceads_os/knowledge/concepts/pixel_capi_dual_tracking.md +79 -0
  170. spaceads_os-0.3.0/src/spaceads_os/knowledge/conversion_plans/funnel_example.yaml +65 -0
  171. spaceads_os-0.3.0/src/spaceads_os/knowledge/creative_specs/google_ads.md +95 -0
  172. spaceads_os-0.3.0/src/spaceads_os/knowledge/creative_specs/linkedin.md +57 -0
  173. spaceads_os-0.3.0/src/spaceads_os/knowledge/creative_specs/meta.md +102 -0
  174. spaceads_os-0.3.0/src/spaceads_os/knowledge/creative_specs/tiktok.md +108 -0
  175. spaceads_os-0.3.0/src/spaceads_os/knowledge/intel_sources.yaml +260 -0
  176. spaceads_os-0.3.0/src/spaceads_os/knowledge/playbooks/b2b_saas.md +113 -0
  177. spaceads_os-0.3.0/src/spaceads_os/knowledge/playbooks/dtc_ecommerce.md +134 -0
  178. spaceads_os-0.3.0/src/spaceads_os/knowledge/playbooks/lead_gen_b2c.md +106 -0
  179. spaceads_os-0.3.0/src/spaceads_os/knowledge/playbooks/local_multi_location.md +104 -0
  180. spaceads_os-0.3.0/src/spaceads_os/knowledge/playbooks/mobile_app.md +105 -0
  181. spaceads_os-0.3.0/src/spaceads_os/knowledge/reference/agency_mode.md +86 -0
  182. spaceads_os-0.3.0/src/spaceads_os/knowledge/reference/agent_catalog.md +84 -0
  183. spaceads_os-0.3.0/src/spaceads_os/knowledge/reference/client_brief.md +203 -0
  184. spaceads_os-0.3.0/src/spaceads_os/knowledge/reference/errors.json +139 -0
  185. spaceads_os-0.3.0/src/spaceads_os/knowledge/reference/glossary.md +59 -0
  186. spaceads_os-0.3.0/src/spaceads_os/knowledge/reference/multichannel.md +56 -0
  187. spaceads_os-0.3.0/src/spaceads_os/knowledge/reference/quickstart.md +125 -0
  188. spaceads_os-0.3.0/src/spaceads_os/knowledge/seasonal_calendar.yaml +323 -0
  189. spaceads_os-0.3.0/src/spaceads_os/license/__init__.py +61 -0
  190. spaceads_os-0.3.0/src/spaceads_os/license/__main__.py +107 -0
  191. spaceads_os-0.3.0/src/spaceads_os/license/exceptions.py +35 -0
  192. spaceads_os-0.3.0/src/spaceads_os/license/seat.py +82 -0
  193. spaceads_os-0.3.0/src/spaceads_os/license/updater.py +89 -0
  194. spaceads_os-0.3.0/src/spaceads_os/license/verify.py +258 -0
  195. spaceads_os-0.3.0/src/spaceads_os/meta_ads/__init__.py +69 -0
  196. spaceads_os-0.3.0/src/spaceads_os/meta_ads/ads.py +171 -0
  197. spaceads_os-0.3.0/src/spaceads_os/meta_ads/adsets.py +206 -0
  198. spaceads_os-0.3.0/src/spaceads_os/meta_ads/analysis.py +245 -0
  199. spaceads_os-0.3.0/src/spaceads_os/meta_ads/api_utils.py +181 -0
  200. spaceads_os-0.3.0/src/spaceads_os/meta_ads/audit.py +370 -0
  201. spaceads_os-0.3.0/src/spaceads_os/meta_ads/auth.py +171 -0
  202. spaceads_os-0.3.0/src/spaceads_os/meta_ads/blended.py +157 -0
  203. spaceads_os-0.3.0/src/spaceads_os/meta_ads/bulk.py +302 -0
  204. spaceads_os-0.3.0/src/spaceads_os/meta_ads/campaigns.py +202 -0
  205. spaceads_os-0.3.0/src/spaceads_os/meta_ads/client.py +201 -0
  206. spaceads_os-0.3.0/src/spaceads_os/meta_ads/clients_config.py +135 -0
  207. spaceads_os-0.3.0/src/spaceads_os/meta_ads/config.py +42 -0
  208. spaceads_os-0.3.0/src/spaceads_os/meta_ads/diagnostics.py +971 -0
  209. spaceads_os-0.3.0/src/spaceads_os/meta_ads/ga4.py +259 -0
  210. spaceads_os-0.3.0/src/spaceads_os/meta_ads/insights.py +173 -0
  211. spaceads_os-0.3.0/src/spaceads_os/meta_ads/optimization.py +549 -0
  212. spaceads_os-0.3.0/src/spaceads_os/meta_ads/reporting.py +430 -0
  213. spaceads_os-0.3.0/src/spaceads_os/meta_ads/rules.py +692 -0
  214. spaceads_os-0.3.0/src/spaceads_os/meta_ads/safety.py +436 -0
  215. spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/__init__.py +4 -0
  216. spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/_cli_common.py +142 -0
  217. spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/add_negative_audience.py +117 -0
  218. spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/audience_overlap.py +164 -0
  219. spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/creative_rotation.py +143 -0
  220. spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/daily_digest.py +119 -0
  221. spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/enable_campaign.py +69 -0
  222. spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/frequency_audit.py +121 -0
  223. spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/full_audit.py +107 -0
  224. spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/pause_campaign.py +71 -0
  225. spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/pixel_capi_health.py +184 -0
  226. spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/placement_breakdown.py +179 -0
  227. spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/quick_check.py +151 -0
  228. spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/update_bid.py +119 -0
  229. spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/update_budget.py +185 -0
  230. spaceads_os-0.3.0/src/spaceads_os/meta_ads/trends.py +289 -0
  231. spaceads_os-0.3.0/src/spaceads_os/migrations/__init__.py +1 -0
  232. spaceads_os-0.3.0/src/spaceads_os/migrations/m0001_add_brand_system.py +112 -0
  233. spaceads_os-0.3.0/src/spaceads_os/multichannel/__init__.py +9 -0
  234. spaceads_os-0.3.0/src/spaceads_os/multichannel/attribution_compare.py +159 -0
  235. spaceads_os-0.3.0/src/spaceads_os/multichannel/budget_allocation.py +139 -0
  236. spaceads_os-0.3.0/src/spaceads_os/multichannel/overview.py +188 -0
  237. spaceads_os-0.3.0/src/spaceads_os/onboarding/__init__.py +32 -0
  238. spaceads_os-0.3.0/src/spaceads_os/onboarding/operator.py +149 -0
  239. spaceads_os-0.3.0/src/spaceads_os/onboarding/sentinel.py +62 -0
  240. spaceads_os-0.3.0/src/spaceads_os/onboarding/session_check.py +75 -0
  241. spaceads_os-0.3.0/src/spaceads_os/reports/__init__.py +14 -0
  242. spaceads_os-0.3.0/src/spaceads_os/reports/branding.py +125 -0
  243. spaceads_os-0.3.0/src/spaceads_os/reports/runner.py +566 -0
  244. spaceads_os-0.3.0/src/spaceads_os/reports/templates/00_brand_kit.html +383 -0
  245. spaceads_os-0.3.0/src/spaceads_os/reports/templates/01_executive_summary.html +200 -0
  246. spaceads_os-0.3.0/src/spaceads_os/reports/templates/02_ecommerce_performance.html +246 -0
  247. spaceads_os-0.3.0/src/spaceads_os/reports/templates/03_leadgen_performance.html +265 -0
  248. spaceads_os-0.3.0/src/spaceads_os/reports/templates/04_brand_awareness.html +215 -0
  249. spaceads_os-0.3.0/src/spaceads_os/reports/templates/05_social_engagement.html +204 -0
  250. spaceads_os-0.3.0/src/spaceads_os/reports/templates/06_content_analysis.html +233 -0
  251. spaceads_os-0.3.0/src/spaceads_os/reports/templates/07_local_business.html +236 -0
  252. spaceads_os-0.3.0/src/spaceads_os/reports/templates/08_growth_roadmap.html +461 -0
  253. spaceads_os-0.3.0/src/spaceads_os/reports/templates/09_bucketing_proposal.html +517 -0
  254. spaceads_os-0.3.0/src/spaceads_os/reports/templates/10_experiment_verdict.html +328 -0
  255. spaceads_os-0.3.0/src/spaceads_os/reports/templates/11_competitive_landscape.html +271 -0
  256. spaceads_os-0.3.0/src/spaceads_os/reports/templates/12_feed_health.html +280 -0
  257. spaceads_os-0.3.0/src/spaceads_os/reports/templates/13_seasonal_calendar.html +322 -0
  258. spaceads_os-0.3.0/src/spaceads_os/reports/templates/README.md +57 -0
  259. spaceads_os-0.3.0/src/spaceads_os/reports/templates/_assets/brand.css +359 -0
  260. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/__init__.py +105 -0
  261. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/account_config.py +131 -0
  262. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/adgroups.py +255 -0
  263. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/ads.py +169 -0
  264. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/analysis.py +173 -0
  265. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/api_utils.py +122 -0
  266. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/audiences.py +314 -0
  267. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/auth.py +485 -0
  268. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/blended.py +148 -0
  269. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/bulk.py +225 -0
  270. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/campaigns.py +243 -0
  271. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/client.py +445 -0
  272. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/config.py +75 -0
  273. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/creatives.py +227 -0
  274. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/diagnostics.py +348 -0
  275. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/ga4.py +77 -0
  276. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/insights.py +285 -0
  277. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/optimization.py +896 -0
  278. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/pixel.py +254 -0
  279. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/reporting.py +212 -0
  280. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/reports_async.py +198 -0
  281. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/rules.py +482 -0
  282. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/safety.py +406 -0
  283. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/__init__.py +1 -0
  284. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/_cli_common.py +101 -0
  285. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/audience_consolidation.py +88 -0
  286. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/capi_diagnostic.py +119 -0
  287. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/creative_rotation.py +113 -0
  288. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/daily_digest.py +85 -0
  289. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/enable_campaign.py +76 -0
  290. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/full_audit.py +119 -0
  291. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/gmv_max_check.py +89 -0
  292. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/pause_campaign.py +78 -0
  293. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/quick_check.py +143 -0
  294. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/smart_plus_readiness.py +109 -0
  295. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/update_bid.py +94 -0
  296. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/update_budget.py +109 -0
  297. spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/trends.py +207 -0
  298. spaceads_os-0.3.0/src/spaceads_os.egg-info/PKG-INFO +335 -0
  299. spaceads_os-0.3.0/src/spaceads_os.egg-info/SOURCES.txt +314 -0
  300. spaceads_os-0.3.0/src/spaceads_os.egg-info/dependency_links.txt +1 -0
  301. spaceads_os-0.3.0/src/spaceads_os.egg-info/entry_points.txt +3 -0
  302. spaceads_os-0.3.0/src/spaceads_os.egg-info/requires.txt +49 -0
  303. spaceads_os-0.3.0/src/spaceads_os.egg-info/top_level.txt +1 -0
  304. spaceads_os-0.3.0/tests/test_agents_present.py +240 -0
  305. spaceads_os-0.3.0/tests/test_audit_upstream.py +116 -0
  306. spaceads_os-0.3.0/tests/test_command_catalog.py +218 -0
  307. spaceads_os-0.3.0/tests/test_license_check_latency.py +154 -0
  308. spaceads_os-0.3.0/tests/test_no_agency_artifacts.py +104 -0
  309. spaceads_os-0.3.0/tests/test_no_polish.py +104 -0
  310. spaceads_os-0.3.0/tests/test_onboarding_operator.py +114 -0
  311. spaceads_os-0.3.0/tests/test_onboarding_session_check.py +72 -0
  312. spaceads_os-0.3.0/tests/test_plugin.py +101 -0
  313. spaceads_os-0.3.0/tests/test_report_runner.py +301 -0
  314. spaceads_os-0.3.0/tests/test_scaffold.py +98 -0
  315. spaceads_os-0.3.0/tests/test_seat_token.py +159 -0
  316. spaceads_os-0.3.0/tests/test_updater.py +173 -0
@@ -0,0 +1,81 @@
1
+ SPACE ADS OS — COMMERCIAL LICENSE AGREEMENT
2
+
3
+ Copyright (c) Space Ads Sp. z o.o. All rights reserved.
4
+
5
+ This software is licensed, not sold. Use of this software requires an active,
6
+ paid monthly subscription managed at https://academy.spaceads.agency/space-ads-os.
7
+
8
+ 1. GRANT
9
+ Subject to an active monthly subscription, Space Ads Sp. z o.o. ("Licensor")
10
+ grants Licensee a non-exclusive, non-transferable, revocable right to install
11
+ and run this software on a reasonable number of personal devices controlled
12
+ by the Licensee.
13
+
14
+ 2. SUBSCRIPTION & BILLING
15
+ The license is delivered on a monthly subscription basis with auto-renewal.
16
+ The subscription continues until canceled by Licensee through the customer
17
+ dashboard at https://academy.spaceads.agency/account/subscription. Cancellation
18
+ takes effect at the end of the then-current paid billing cycle; no proration
19
+ applies. Failure to pay a renewal invoice (e.g. card declined) places the
20
+ subscription in a suspended state at the end of the paid cycle.
21
+
22
+ 3. RUNTIME GATING
23
+ At every CLI entry point this software verifies an unexpired license
24
+ against Licensor's verification endpoint. When the subscription is canceled
25
+ or payment fails, the CLI ceases accepting commands at the end of the paid
26
+ cycle. Licensee's local data, audit logs, client briefs, and credentials
27
+ are NOT touched by license expiry — only the runtime is blocked. Reactivating
28
+ the subscription restores access without re-onboarding.
29
+
30
+ 4. RESTRICTIONS
31
+ Licensee shall not: (a) sublicense, sell, lease, or otherwise distribute the
32
+ software or any derivative; (b) remove or alter license-verification code;
33
+ (c) reverse engineer the software except as expressly permitted by applicable
34
+ law; (d) use the software to provide services to third parties under a
35
+ white-label or reseller arrangement without a separate written agreement.
36
+
37
+ 5. UPDATES
38
+ While the subscription is active, Licensee is entitled to all software
39
+ updates published on the stable channel — including new API version
40
+ integrations (e.g. Google Ads v24 → v25), new playbooks, agents, and
41
+ report templates. There is no separate fee for version bumps.
42
+
43
+ 6. CREDENTIALS
44
+ The software stores third-party API tokens (Google, Meta, TikTok, GA4) on
45
+ Licensee's machine and, in encrypted form, on Licensor's servers solely for
46
+ recovery on a new device. Tokens are encrypted at rest with AES-256-GCM.
47
+ Licensor will not access plaintext tokens except as required to investigate
48
+ a support ticket initiated by Licensee. Licensee retains full ownership of
49
+ the underlying ad accounts; Licensor never assumes ad-account access in its
50
+ own name.
51
+
52
+ 7. REFUNDS
53
+ Monthly invoices are non-refundable except as required by applicable consumer
54
+ protection law. EU consumers waive the 14-day withdrawal right at checkout
55
+ in exchange for immediate access (Art. 38 pkt 13 ustawy o prawach konsumenta).
56
+
57
+ 8. DISCLAIMER
58
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
59
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
60
+ FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT.
61
+
62
+ 9. LIMITATION OF LIABILITY
63
+ IN NO EVENT SHALL LICENSOR BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER
64
+ LIABILITY ARISING FROM ADVERTISING SPEND, ACCOUNT SUSPENSION, OR ANY OTHER
65
+ USE OF OR INABILITY TO USE THE SOFTWARE. LICENSEE IS SOLELY RESPONSIBLE FOR
66
+ REVIEWING AND CONFIRMING EVERY MUTATION BEFORE EXECUTION. THE SIX-LAYER
67
+ SAFETY FRAMEWORK IS A SAFEGUARD, NOT A GUARANTEE.
68
+
69
+ 10. TERMINATION
70
+ Licensor may terminate this license immediately if Licensee breaches any
71
+ term, upon which the license is revoked and the CLI hard-blocks. Upon
72
+ termination Licensee must cease all use and remove the software from all
73
+ devices.
74
+
75
+ 11. GOVERNING LAW
76
+ This Agreement is governed by the laws of the Republic of Poland.
77
+
78
+ For questions: legal@spaceads.agency
79
+
80
+ This LICENSE file is intended to be reviewed and finalized by counsel before
81
+ public release.
@@ -0,0 +1,335 @@
1
+ Metadata-Version: 2.4
2
+ Name: spaceads-os
3
+ Version: 0.3.0
4
+ Summary: Space Ads OS — multi-channel ads management for Google Ads, Meta, TikTok, and GA4 driven through Claude Code.
5
+ Author-email: Space Ads <support@spaceads.agency>
6
+ License: SPACE ADS OS — COMMERCIAL LICENSE AGREEMENT
7
+
8
+ Copyright (c) Space Ads Sp. z o.o. All rights reserved.
9
+
10
+ This software is licensed, not sold. Use of this software requires an active,
11
+ paid monthly subscription managed at https://academy.spaceads.agency/space-ads-os.
12
+
13
+ 1. GRANT
14
+ Subject to an active monthly subscription, Space Ads Sp. z o.o. ("Licensor")
15
+ grants Licensee a non-exclusive, non-transferable, revocable right to install
16
+ and run this software on a reasonable number of personal devices controlled
17
+ by the Licensee.
18
+
19
+ 2. SUBSCRIPTION & BILLING
20
+ The license is delivered on a monthly subscription basis with auto-renewal.
21
+ The subscription continues until canceled by Licensee through the customer
22
+ dashboard at https://academy.spaceads.agency/account/subscription. Cancellation
23
+ takes effect at the end of the then-current paid billing cycle; no proration
24
+ applies. Failure to pay a renewal invoice (e.g. card declined) places the
25
+ subscription in a suspended state at the end of the paid cycle.
26
+
27
+ 3. RUNTIME GATING
28
+ At every CLI entry point this software verifies an unexpired license
29
+ against Licensor's verification endpoint. When the subscription is canceled
30
+ or payment fails, the CLI ceases accepting commands at the end of the paid
31
+ cycle. Licensee's local data, audit logs, client briefs, and credentials
32
+ are NOT touched by license expiry — only the runtime is blocked. Reactivating
33
+ the subscription restores access without re-onboarding.
34
+
35
+ 4. RESTRICTIONS
36
+ Licensee shall not: (a) sublicense, sell, lease, or otherwise distribute the
37
+ software or any derivative; (b) remove or alter license-verification code;
38
+ (c) reverse engineer the software except as expressly permitted by applicable
39
+ law; (d) use the software to provide services to third parties under a
40
+ white-label or reseller arrangement without a separate written agreement.
41
+
42
+ 5. UPDATES
43
+ While the subscription is active, Licensee is entitled to all software
44
+ updates published on the stable channel — including new API version
45
+ integrations (e.g. Google Ads v24 → v25), new playbooks, agents, and
46
+ report templates. There is no separate fee for version bumps.
47
+
48
+ 6. CREDENTIALS
49
+ The software stores third-party API tokens (Google, Meta, TikTok, GA4) on
50
+ Licensee's machine and, in encrypted form, on Licensor's servers solely for
51
+ recovery on a new device. Tokens are encrypted at rest with AES-256-GCM.
52
+ Licensor will not access plaintext tokens except as required to investigate
53
+ a support ticket initiated by Licensee. Licensee retains full ownership of
54
+ the underlying ad accounts; Licensor never assumes ad-account access in its
55
+ own name.
56
+
57
+ 7. REFUNDS
58
+ Monthly invoices are non-refundable except as required by applicable consumer
59
+ protection law. EU consumers waive the 14-day withdrawal right at checkout
60
+ in exchange for immediate access (Art. 38 pkt 13 ustawy o prawach konsumenta).
61
+
62
+ 8. DISCLAIMER
63
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
64
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
65
+ FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT.
66
+
67
+ 9. LIMITATION OF LIABILITY
68
+ IN NO EVENT SHALL LICENSOR BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER
69
+ LIABILITY ARISING FROM ADVERTISING SPEND, ACCOUNT SUSPENSION, OR ANY OTHER
70
+ USE OF OR INABILITY TO USE THE SOFTWARE. LICENSEE IS SOLELY RESPONSIBLE FOR
71
+ REVIEWING AND CONFIRMING EVERY MUTATION BEFORE EXECUTION. THE SIX-LAYER
72
+ SAFETY FRAMEWORK IS A SAFEGUARD, NOT A GUARANTEE.
73
+
74
+ 10. TERMINATION
75
+ Licensor may terminate this license immediately if Licensee breaches any
76
+ term, upon which the license is revoked and the CLI hard-blocks. Upon
77
+ termination Licensee must cease all use and remove the software from all
78
+ devices.
79
+
80
+ 11. GOVERNING LAW
81
+ This Agreement is governed by the laws of the Republic of Poland.
82
+
83
+ For questions: legal@spaceads.agency
84
+
85
+ This LICENSE file is intended to be reviewed and finalized by counsel before
86
+ public release.
87
+
88
+ Project-URL: Homepage, https://academy.spaceads.agency/space-ads-os
89
+ Project-URL: Documentation, https://academy.spaceads.agency/space-ads-os/docs
90
+ Project-URL: Support, https://academy.spaceads.agency/support
91
+ Keywords: advertising,google-ads,meta-ads,tiktok-ads,ga4,claude-code
92
+ Classifier: Development Status :: 4 - Beta
93
+ Classifier: Intended Audience :: Developers
94
+ Classifier: License :: Other/Proprietary License
95
+ Classifier: Programming Language :: Python :: 3
96
+ Classifier: Programming Language :: Python :: 3.10
97
+ Classifier: Programming Language :: Python :: 3.11
98
+ Classifier: Programming Language :: Python :: 3.12
99
+ Classifier: Topic :: Office/Business
100
+ Requires-Python: >=3.10
101
+ Description-Content-Type: text/markdown
102
+ License-File: LICENSE
103
+ Requires-Dist: facebook-business>=25.0.1
104
+ Requires-Dist: google-ads<32.0.0,>=31.0.0
105
+ Requires-Dist: google-analytics-data>=0.22.0
106
+ Requires-Dist: pydantic>=2.0.0
107
+ Requires-Dist: pydantic-settings>=2.0.0
108
+ Requires-Dist: python-dotenv>=1.0.0
109
+ Requires-Dist: pandas>=2.0.0
110
+ Requires-Dist: rich>=13.0.0
111
+ Requires-Dist: questionary>=2.0.0
112
+ Requires-Dist: pyyaml>=6.0.0
113
+ Requires-Dist: httpx>=0.27.0
114
+ Requires-Dist: platformdirs>=4.0.0
115
+ Requires-Dist: cryptography>=42.0.0
116
+ Requires-Dist: beautifulsoup4>=4.12.0
117
+ Requires-Dist: requests>=2.32.0
118
+ Requires-Dist: holidays>=0.50
119
+ Provides-Extra: dev
120
+ Requires-Dist: pytest>=8.0.0; extra == "dev"
121
+ Requires-Dist: pytest-cov>=5.0.0; extra == "dev"
122
+ Requires-Dist: ruff>=0.4.0; extra == "dev"
123
+ Requires-Dist: mypy>=1.10.0; extra == "dev"
124
+ Requires-Dist: build>=1.2.0; extra == "dev"
125
+ Provides-Extra: ga4
126
+ Requires-Dist: google-analytics-admin>=0.29.0; extra == "ga4"
127
+ Provides-Extra: reporting
128
+ Requires-Dist: markdown>=3.6; extra == "reporting"
129
+ Requires-Dist: weasyprint>=62.0; extra == "reporting"
130
+ Provides-Extra: sheets
131
+ Requires-Dist: gspread>=6.0.0; extra == "sheets"
132
+ Requires-Dist: google-auth>=2.30.0; extra == "sheets"
133
+ Provides-Extra: docs
134
+ Requires-Dist: mkdocs>=1.6.0; extra == "docs"
135
+ Requires-Dist: mkdocs-material>=9.5.0; extra == "docs"
136
+ Requires-Dist: mkdocstrings[python]>=0.25.0; extra == "docs"
137
+ Provides-Extra: all
138
+ Requires-Dist: google-analytics-admin>=0.29.0; extra == "all"
139
+ Requires-Dist: markdown>=3.6; extra == "all"
140
+ Requires-Dist: weasyprint>=62.0; extra == "all"
141
+ Requires-Dist: gspread>=6.0.0; extra == "all"
142
+ Requires-Dist: google-auth>=2.30.0; extra == "all"
143
+ Requires-Dist: mkdocs>=1.6.0; extra == "all"
144
+ Requires-Dist: mkdocs-material>=9.5.0; extra == "all"
145
+ Requires-Dist: mkdocstrings[python]>=0.25.0; extra == "all"
146
+ Dynamic: license-file
147
+
148
+ # Space Ads OS
149
+
150
+ Multi-channel paid media management for Google Ads, Meta Ads, TikTok Ads, and Google Analytics 4 — driven through Claude Code in natural language.
151
+
152
+ > Commercial software. An active monthly subscription is required to operate the CLI. See [Pricing](https://academy.spaceads.agency/space-ads-os).
153
+
154
+ ## What it does
155
+
156
+ Space Ads OS is a Python toolkit plus a set of Claude Code slash commands. You talk to Claude in plain language, and Claude calls verified scripts that read and (with confirmation) modify your ad accounts.
157
+
158
+ - **Google Ads v24.1** — full audits, search-term mining, negative-keyword recommendations, budget and tROAS adjustments, Performance Max diagnostics, iOS vs Android segmentation, frequency-of-reach (`unique_users_*_plus`), and safe terminal mutations on `PMAX_REPLACEMENT_SHOPPING` experiments (`end_experiment` / `graduate_experiment`) gated on the v24.1 direct-stats safety layer.
159
+ - **Meta Ads v25** — campaign health checks, creative analysis, audience overlap, budget pacing, budget / bid mutations with ±30% / ±25% guardrails.
160
+ - **TikTok Ads v1.3** — Smart+ readiness, daily diagnostics, advertiser-level performance, budget / bid mutations matching the Google + Meta surface.
161
+ - **Google Analytics 4** — cross-platform conversion attribution, audience cohorts.
162
+ - **Six-layer safety framework** — every mutation is validated against `LIMITS`, reviewed by the `mutation-reviewer` subagent, previewed, confirmed by the user, executed, verified post-mutation, and logged to `logs/<channel>_changes.jsonl`.
163
+ - **Five subagents** for the long-running flows: `mutation-reviewer`, `report-builder`, `onboarding-coach`, `brand-extractor`, `creative-director`. Each isolates a multi-step task in its own context window.
164
+ - **Per-client brief** — each account you manage carries its own `brief.yaml` (goals, target ROAS, audience, ad-style do/don't, **brand_system** for logo / palette / typography / voice) and `voice.md` (brand voice). Both auto-inject into every slash command so recommendations stay on-brand.
165
+
166
+ ## What's included
167
+
168
+ | Layer | Surface |
169
+ | -------------------- | ------------------------------------------------------------------------ |
170
+ | User entry points | 23 slash commands in `.claude/commands/` ([catalog](docs/commands.md)) |
171
+ | Agent orchestration | 5 subagents in `.claude/agents/` ([catalog](docs/agents.md)) |
172
+ | Channel libraries | `spaceads_os.{google_ads, meta_ads, tiktok_ads, ga4}` (read + mutate) |
173
+ | Multi-channel views | `spaceads_os.multichannel.*` (overview, budget allocation, attribution) |
174
+ | Brand system | `spaceads_os.brand.*` — auto-extract from website, persist to brief.yaml |
175
+ | Creative pipeline | `spaceads_os.creative.*` — briefs, wireframes, safety-zone validator |
176
+ | Reports | `spaceads_os.reports.*` + 13 brand-styled HTML templates |
177
+ | License + telemetry | `spaceads_os.license.*` (warm-cache fast path, opt-in telemetry) |
178
+ | Knowledge base | `spaceads_os.knowledge/` — 30+ markdown files, shipped in the wheel |
179
+
180
+ Full docs at [academy.spaceads.agency/space-ads-os/docs](https://academy.spaceads.agency/space-ads-os/docs).
181
+
182
+ ## First run
183
+
184
+ **Prerequisite:** Python 3.10+ and [Claude Code](https://docs.claude.com/claude-code) installed.
185
+
186
+ ### Recommended — install as a Claude Code plugin
187
+
188
+ Inside Claude Code:
189
+
190
+ ```
191
+ /plugin marketplace add rafalch62/space-ads-os-plugin
192
+ /plugin install space-ads-os@space-ads
193
+ ```
194
+
195
+ On the next session start the plugin installs the `spaceads-os` engine from PyPI automatically, drops the operator guide into your project, and greets you. No terminal required.
196
+
197
+ ### Alternative — install with pip
198
+
199
+ ```bash
200
+ # Requires Python 3.10+
201
+ pip install spaceads-os
202
+ mkdir ~/spaceads && cd ~/spaceads
203
+ spaceads init # writes CLAUDE.md + .claude/ slash commands, agents, SessionStart hook
204
+ claude
205
+ ```
206
+
207
+ `spaceads init` is idempotent — it never overwrites a file you already have unless you pass `--force`. The `spaceads-setup` wizard also runs `init` automatically as its first step, so if you start there instead you can skip the standalone command.
208
+
209
+ Either way, the first time Claude Code opens the folder, the SessionStart hook detects that no operator profile exists yet and Claude greets you with a suggestion to run:
210
+
211
+ ```
212
+ /spaceads-onboard
213
+ ```
214
+
215
+ That command is a five-minute conversation. It captures who you are (single business owner or agency operator), the businesses you manage, their websites, goals, and ad-style preferences. Everything is saved locally to `.spaceads/operator.yaml` and `clients/<slug>/brief.yaml` — these files survive `pip install -U` because they live outside the package.
216
+
217
+ If the hook does not auto-fire (for example you used a custom `claude` config), run `/spaceads-onboard` manually — same result.
218
+
219
+ ## Wiring up API access
220
+
221
+ Once onboarding is complete, Claude tells you to open a terminal and run:
222
+
223
+ ```bash
224
+ spaceads-setup --skip-brief
225
+ ```
226
+
227
+ That walks you through:
228
+
229
+ 1. License activation
230
+ 2. Per-channel authentication: Meta, TikTok, and GA4 go through the OAuth bridge at `oauth.spaceads.agency` — the academy hosts the apps server-side, encrypts the resulting tokens in its `oauth_vault` table, and serves them to your CLI on demand against your license key. All three apps are **production-verified** with their respective providers (Google for the `analytics.readonly` GA4 scope, Meta as a Facebook Login for Business System User app, TikTok as a verified Marketing API app), so the consent screen is the normal blue-checkmark flow with no "unverified app" warning. Google Ads is the exception: Google's policy requires every heavy API user to hold their own developer token, so the wizard walks you through registering an MCC + OAuth client.
231
+ 3. Vault mirror — a redundant encrypted copy at `clients/<slug>/credentials/<channel>.json.enc` lets you recover after a license-key file loss without re-running OAuth.
232
+
233
+ The `--skip-brief` flag tells the wizard you have already filled in operator and client briefs through `/spaceads-onboard`. Without that flag the wizard runs an extra inline brief walkthrough — useful if you skipped onboarding entirely.
234
+
235
+ ## Slash commands
236
+
237
+ Back in Claude Code, every slash command auto-injects your operator profile and the active client's brief, so recommendations stay on-brand:
238
+
239
+ ```
240
+ /spaceads-check meta
241
+ /spaceads-strategy google_ads --client acme-sneakers
242
+ /spaceads-brief view
243
+ /spaceads-onboard --add-client # add another client later
244
+ /spaceads-report 01_executive_summary --period last_30d
245
+ ```
246
+
247
+ ### Strategic and operational commands
248
+
249
+ Beyond the per-channel check / strategy / modify trio, Space Ads OS ships
250
+ five higher-level workflows:
251
+
252
+ | Command | What it does |
253
+ |---|---|
254
+ | `/spaceads-bucketing` | Segments a Shopping / PMax feed into 4 performance tiers (Platinum / Gold / Silver / Bronze) and proposes 4 separate campaigns with budgets and tROAS sized per tier. |
255
+ | `/spaceads-seasonal` | Cross-references the seasonal calendar against the feed and impressions. Flags categories whose season is live but the account is not promoting them. |
256
+ | `/spaceads-grow` | 90-day strategic review per client — Socratic walk through 7 axes, ranked hypothesis backlog, 3 / 6 / 12-month roadmap. |
257
+ | `/spaceads-cadence` | Reports overdue / due / scheduled tasks across every client (growth reviews, seasonal setup, monthly reports, brief completeness). |
258
+ | `/spaceads-intel` | Weekly industry pulse — Reddit, top PPC blogs, Google Ads Developer Blog. Scored, deduplicated, grouped into topic libraries. |
259
+
260
+ The last command renders a brand-styled HTML report from a Space Ads OS template, fills it with live data from every channel the client uses, and opens it in your browser. **Thirteen deliverable templates** ship in the package — executive summary, e-commerce, lead-gen, brand awareness, social, content analysis, local business, growth roadmap, bucketing proposal, experiment verdict (v24.1), competitive landscape, feed health, seasonal calendar. See [Generating reports](src/spaceads_os/knowledge/reference/quickstart.md#5-generate-a-report) for the full workflow.
261
+
262
+ For new ad creatives, run `/spaceads-brand extract` once per client to capture logo, palette, fonts, and voice samples from the website, then `/spaceads-creative brief --platform meta_stories --campaign "<name>" --objective "<text>"`. You'll get a markdown brief plus a wireframe HTML preview that overlays the platform's safety zones (Meta Stories top 14% / bottom 20%, TikTok in-feed top 130 px / bottom 484 px, Google Display 5-aspect set, etc.). The brief is platform-spec-compliant by construction; the validator (`/spaceads-creative validate <asset> --platform <slug>`) checks the rendered file before upload.
263
+
264
+ ## Generating images
265
+
266
+ Space Ads OS produces creative briefs and wireframes in-house, but does not bundle an image-gen model — pick the one you trust. Claude Code natively supports MCP image-gen servers; add one to your `.mcp.json`:
267
+
268
+ ```json
269
+ {
270
+ "mcpServers": {
271
+ "image-gen": {
272
+ "type": "stdio",
273
+ "command": "npx",
274
+ "args": ["-y", "@your-org/your-image-gen-mcp"]
275
+ }
276
+ }
277
+ }
278
+ ```
279
+
280
+ When configured, the `creative-director` agent passes the brief content as the prompt and saves the result into `clients/<slug>/creatives/<campaign>/<variant>/asset.<ext>`. Without one, the agent produces the brief + preview and you generate the asset in your preferred tool — same end result, manual handoff in the middle.
281
+
282
+ ## Channels
283
+
284
+ | Channel | Diagnostic | Read | Mutate | Auth model |
285
+ | ------------- | :--------: | :--: | :----: | --------------------------------------------------------------------------------- |
286
+ | Google Ads | yes | yes | yes | Your own developer token (issued from a Google Ads **Manager Account / MCC** — a regular Google Ads account cannot issue one) + your own GCP OAuth client. If you don't have an MCC yet, create one first (free, ~10 min) and link your existing account; the wizard walks you through every step. |
287
+ | Meta Ads | yes | yes | yes | OAuth via `oauth.spaceads.agency` → System User access token (Facebook Login for Business, non-expiring) → encrypted in `oauth_vault`. CLI fetches on demand by license key; nothing plaintext on disk. |
288
+ | TikTok Ads | yes | yes | yes | OAuth via `oauth.spaceads.agency` → access token (verified Marketing API app, non-expiring) → encrypted in `oauth_vault`. Same on-demand fetch model as Meta. |
289
+ | GA4 | yes | yes | n/a | OAuth via `oauth.spaceads.agency`, or upload your own service-account JSON. |
290
+ | LinkedIn Ads | not yet | n/a | n/a | Placeholder; spec sheet at `src/spaceads_os/knowledge/creative_specs/linkedin.md`. |
291
+
292
+ > Why is Google Ads different on auth? Google's policy requires every heavy API user to hold their own developer token with `basic_access` or higher, and that token can only be issued from a Manager Account (MCC). Sharing a single token across customers does not pass review. Solo operators with only a regular Google Ads account: create an MCC at <https://ads.google.com/aw/accounts/managers/> (free, ~10 min) and link your existing account before applying for the developer token.
293
+
294
+ ## License model
295
+
296
+ - **Monthly subscription with auto-renewal.** Pay monthly, the CLI keeps running while the subscription is active. When the subscription is canceled or a renewal payment fails, the CLI hard-blocks at the end of the paid cycle.
297
+ - **Updates included** for the lifetime of the subscription — new channels, new safety patterns, schema migrations are pulled automatically while the subscription is active.
298
+ - **Hardware-soft-bound.** Moving to a new laptop is fine; the system flags unusual fingerprint churn for review but does not block.
299
+ - **License recovery** by email at any time from the customer dashboard at `https://academy.spaceads.agency/account/subscription`.
300
+ - **Cancel anytime.** End-of-cycle cancellation, no proration. Local data, audit logs, briefs and credentials stay untouched on disk after cancellation.
301
+
302
+ ## Documentation
303
+
304
+ Full docs at [academy.spaceads.agency/space-ads-os/docs](https://academy.spaceads.agency/space-ads-os/docs). The site is built from `docs/` with mkdocs-material; install the `[docs]` extra to build it locally:
305
+
306
+ ```bash
307
+ pip install "spaceads-os[docs]"
308
+ mkdocs build --strict
309
+ ```
310
+
311
+ Local entry points:
312
+
313
+ - [Buyer quickstart](docs/sales/buyer-quickstart.md) — five minutes from install to first audit, first report, first creative, first mutation
314
+ - [Slash commands catalog](docs/commands.md) — auto-generated from the live `.claude/commands/`
315
+ - [Subagents catalog](docs/agents.md) — auto-generated from the live `.claude/agents/`
316
+ - [Troubleshooting](docs/troubleshooting.md) — first-run failures and how to recover
317
+
318
+ The full knowledge base ships inside the package at `src/spaceads_os/knowledge/`. Each channel and analytics tool gets one self-contained file with setup, structure, bidding, audience, creative, measurement, KPIs, deprecated features, and Space Ads OS automation in one place:
319
+
320
+ - [Quickstart](src/spaceads_os/knowledge/reference/quickstart.md) — five minutes from install to first audit
321
+ - [Writing a client brief](src/spaceads_os/knowledge/reference/client_brief.md)
322
+ - [Agent catalog](src/spaceads_os/knowledge/reference/agent_catalog.md) — when each subagent activates and what files it can touch
323
+ - Channels: [Google Ads](src/spaceads_os/knowledge/channels/google_ads.md), [Meta Ads](src/spaceads_os/knowledge/channels/meta_ads.md), [TikTok Ads](src/spaceads_os/knowledge/channels/tiktok_ads.md)
324
+ - Analytics: [GA4](src/spaceads_os/knowledge/analytics/ga4.md), [Merchant Center](src/spaceads_os/knowledge/analytics/merchant_center.md), [GTM / server-side GTM](src/spaceads_os/knowledge/analytics/gtm.md)
325
+ - Creative specs: [overview](src/spaceads_os/knowledge/concepts/creative_specs.md), [Meta](src/spaceads_os/knowledge/creative_specs/meta.md), [Google Ads](src/spaceads_os/knowledge/creative_specs/google_ads.md), [TikTok](src/spaceads_os/knowledge/creative_specs/tiktok.md)
326
+ - Cross-cutting concepts: attribution windows, learning phase, creative testing, dual Pixel+CAPI tracking, blended ROAS, consent / privacy / ATT, budget bands — see `src/spaceads_os/knowledge/concepts/`
327
+ - Vertical playbooks: DTC e-commerce, lead-gen B2C, B2B / SaaS, mobile app, local / multi-location — see `src/spaceads_os/knowledge/playbooks/`
328
+
329
+ ## Support
330
+
331
+ Email `support@spaceads.agency`.
332
+
333
+ ## License
334
+
335
+ Commercial. See [LICENSE](LICENSE).
@@ -0,0 +1,188 @@
1
+ # Space Ads OS
2
+
3
+ Multi-channel paid media management for Google Ads, Meta Ads, TikTok Ads, and Google Analytics 4 — driven through Claude Code in natural language.
4
+
5
+ > Commercial software. An active monthly subscription is required to operate the CLI. See [Pricing](https://academy.spaceads.agency/space-ads-os).
6
+
7
+ ## What it does
8
+
9
+ Space Ads OS is a Python toolkit plus a set of Claude Code slash commands. You talk to Claude in plain language, and Claude calls verified scripts that read and (with confirmation) modify your ad accounts.
10
+
11
+ - **Google Ads v24.1** — full audits, search-term mining, negative-keyword recommendations, budget and tROAS adjustments, Performance Max diagnostics, iOS vs Android segmentation, frequency-of-reach (`unique_users_*_plus`), and safe terminal mutations on `PMAX_REPLACEMENT_SHOPPING` experiments (`end_experiment` / `graduate_experiment`) gated on the v24.1 direct-stats safety layer.
12
+ - **Meta Ads v25** — campaign health checks, creative analysis, audience overlap, budget pacing, budget / bid mutations with ±30% / ±25% guardrails.
13
+ - **TikTok Ads v1.3** — Smart+ readiness, daily diagnostics, advertiser-level performance, budget / bid mutations matching the Google + Meta surface.
14
+ - **Google Analytics 4** — cross-platform conversion attribution, audience cohorts.
15
+ - **Six-layer safety framework** — every mutation is validated against `LIMITS`, reviewed by the `mutation-reviewer` subagent, previewed, confirmed by the user, executed, verified post-mutation, and logged to `logs/<channel>_changes.jsonl`.
16
+ - **Five subagents** for the long-running flows: `mutation-reviewer`, `report-builder`, `onboarding-coach`, `brand-extractor`, `creative-director`. Each isolates a multi-step task in its own context window.
17
+ - **Per-client brief** — each account you manage carries its own `brief.yaml` (goals, target ROAS, audience, ad-style do/don't, **brand_system** for logo / palette / typography / voice) and `voice.md` (brand voice). Both auto-inject into every slash command so recommendations stay on-brand.
18
+
19
+ ## What's included
20
+
21
+ | Layer | Surface |
22
+ | -------------------- | ------------------------------------------------------------------------ |
23
+ | User entry points | 23 slash commands in `.claude/commands/` ([catalog](docs/commands.md)) |
24
+ | Agent orchestration | 5 subagents in `.claude/agents/` ([catalog](docs/agents.md)) |
25
+ | Channel libraries | `spaceads_os.{google_ads, meta_ads, tiktok_ads, ga4}` (read + mutate) |
26
+ | Multi-channel views | `spaceads_os.multichannel.*` (overview, budget allocation, attribution) |
27
+ | Brand system | `spaceads_os.brand.*` — auto-extract from website, persist to brief.yaml |
28
+ | Creative pipeline | `spaceads_os.creative.*` — briefs, wireframes, safety-zone validator |
29
+ | Reports | `spaceads_os.reports.*` + 13 brand-styled HTML templates |
30
+ | License + telemetry | `spaceads_os.license.*` (warm-cache fast path, opt-in telemetry) |
31
+ | Knowledge base | `spaceads_os.knowledge/` — 30+ markdown files, shipped in the wheel |
32
+
33
+ Full docs at [academy.spaceads.agency/space-ads-os/docs](https://academy.spaceads.agency/space-ads-os/docs).
34
+
35
+ ## First run
36
+
37
+ **Prerequisite:** Python 3.10+ and [Claude Code](https://docs.claude.com/claude-code) installed.
38
+
39
+ ### Recommended — install as a Claude Code plugin
40
+
41
+ Inside Claude Code:
42
+
43
+ ```
44
+ /plugin marketplace add rafalch62/space-ads-os-plugin
45
+ /plugin install space-ads-os@space-ads
46
+ ```
47
+
48
+ On the next session start the plugin installs the `spaceads-os` engine from PyPI automatically, drops the operator guide into your project, and greets you. No terminal required.
49
+
50
+ ### Alternative — install with pip
51
+
52
+ ```bash
53
+ # Requires Python 3.10+
54
+ pip install spaceads-os
55
+ mkdir ~/spaceads && cd ~/spaceads
56
+ spaceads init # writes CLAUDE.md + .claude/ slash commands, agents, SessionStart hook
57
+ claude
58
+ ```
59
+
60
+ `spaceads init` is idempotent — it never overwrites a file you already have unless you pass `--force`. The `spaceads-setup` wizard also runs `init` automatically as its first step, so if you start there instead you can skip the standalone command.
61
+
62
+ Either way, the first time Claude Code opens the folder, the SessionStart hook detects that no operator profile exists yet and Claude greets you with a suggestion to run:
63
+
64
+ ```
65
+ /spaceads-onboard
66
+ ```
67
+
68
+ That command is a five-minute conversation. It captures who you are (single business owner or agency operator), the businesses you manage, their websites, goals, and ad-style preferences. Everything is saved locally to `.spaceads/operator.yaml` and `clients/<slug>/brief.yaml` — these files survive `pip install -U` because they live outside the package.
69
+
70
+ If the hook does not auto-fire (for example you used a custom `claude` config), run `/spaceads-onboard` manually — same result.
71
+
72
+ ## Wiring up API access
73
+
74
+ Once onboarding is complete, Claude tells you to open a terminal and run:
75
+
76
+ ```bash
77
+ spaceads-setup --skip-brief
78
+ ```
79
+
80
+ That walks you through:
81
+
82
+ 1. License activation
83
+ 2. Per-channel authentication: Meta, TikTok, and GA4 go through the OAuth bridge at `oauth.spaceads.agency` — the academy hosts the apps server-side, encrypts the resulting tokens in its `oauth_vault` table, and serves them to your CLI on demand against your license key. All three apps are **production-verified** with their respective providers (Google for the `analytics.readonly` GA4 scope, Meta as a Facebook Login for Business System User app, TikTok as a verified Marketing API app), so the consent screen is the normal blue-checkmark flow with no "unverified app" warning. Google Ads is the exception: Google's policy requires every heavy API user to hold their own developer token, so the wizard walks you through registering an MCC + OAuth client.
84
+ 3. Vault mirror — a redundant encrypted copy at `clients/<slug>/credentials/<channel>.json.enc` lets you recover after a license-key file loss without re-running OAuth.
85
+
86
+ The `--skip-brief` flag tells the wizard you have already filled in operator and client briefs through `/spaceads-onboard`. Without that flag the wizard runs an extra inline brief walkthrough — useful if you skipped onboarding entirely.
87
+
88
+ ## Slash commands
89
+
90
+ Back in Claude Code, every slash command auto-injects your operator profile and the active client's brief, so recommendations stay on-brand:
91
+
92
+ ```
93
+ /spaceads-check meta
94
+ /spaceads-strategy google_ads --client acme-sneakers
95
+ /spaceads-brief view
96
+ /spaceads-onboard --add-client # add another client later
97
+ /spaceads-report 01_executive_summary --period last_30d
98
+ ```
99
+
100
+ ### Strategic and operational commands
101
+
102
+ Beyond the per-channel check / strategy / modify trio, Space Ads OS ships
103
+ five higher-level workflows:
104
+
105
+ | Command | What it does |
106
+ |---|---|
107
+ | `/spaceads-bucketing` | Segments a Shopping / PMax feed into 4 performance tiers (Platinum / Gold / Silver / Bronze) and proposes 4 separate campaigns with budgets and tROAS sized per tier. |
108
+ | `/spaceads-seasonal` | Cross-references the seasonal calendar against the feed and impressions. Flags categories whose season is live but the account is not promoting them. |
109
+ | `/spaceads-grow` | 90-day strategic review per client — Socratic walk through 7 axes, ranked hypothesis backlog, 3 / 6 / 12-month roadmap. |
110
+ | `/spaceads-cadence` | Reports overdue / due / scheduled tasks across every client (growth reviews, seasonal setup, monthly reports, brief completeness). |
111
+ | `/spaceads-intel` | Weekly industry pulse — Reddit, top PPC blogs, Google Ads Developer Blog. Scored, deduplicated, grouped into topic libraries. |
112
+
113
+ The last command renders a brand-styled HTML report from a Space Ads OS template, fills it with live data from every channel the client uses, and opens it in your browser. **Thirteen deliverable templates** ship in the package — executive summary, e-commerce, lead-gen, brand awareness, social, content analysis, local business, growth roadmap, bucketing proposal, experiment verdict (v24.1), competitive landscape, feed health, seasonal calendar. See [Generating reports](src/spaceads_os/knowledge/reference/quickstart.md#5-generate-a-report) for the full workflow.
114
+
115
+ For new ad creatives, run `/spaceads-brand extract` once per client to capture logo, palette, fonts, and voice samples from the website, then `/spaceads-creative brief --platform meta_stories --campaign "<name>" --objective "<text>"`. You'll get a markdown brief plus a wireframe HTML preview that overlays the platform's safety zones (Meta Stories top 14% / bottom 20%, TikTok in-feed top 130 px / bottom 484 px, Google Display 5-aspect set, etc.). The brief is platform-spec-compliant by construction; the validator (`/spaceads-creative validate <asset> --platform <slug>`) checks the rendered file before upload.
116
+
117
+ ## Generating images
118
+
119
+ Space Ads OS produces creative briefs and wireframes in-house, but does not bundle an image-gen model — pick the one you trust. Claude Code natively supports MCP image-gen servers; add one to your `.mcp.json`:
120
+
121
+ ```json
122
+ {
123
+ "mcpServers": {
124
+ "image-gen": {
125
+ "type": "stdio",
126
+ "command": "npx",
127
+ "args": ["-y", "@your-org/your-image-gen-mcp"]
128
+ }
129
+ }
130
+ }
131
+ ```
132
+
133
+ When configured, the `creative-director` agent passes the brief content as the prompt and saves the result into `clients/<slug>/creatives/<campaign>/<variant>/asset.<ext>`. Without one, the agent produces the brief + preview and you generate the asset in your preferred tool — same end result, manual handoff in the middle.
134
+
135
+ ## Channels
136
+
137
+ | Channel | Diagnostic | Read | Mutate | Auth model |
138
+ | ------------- | :--------: | :--: | :----: | --------------------------------------------------------------------------------- |
139
+ | Google Ads | yes | yes | yes | Your own developer token (issued from a Google Ads **Manager Account / MCC** — a regular Google Ads account cannot issue one) + your own GCP OAuth client. If you don't have an MCC yet, create one first (free, ~10 min) and link your existing account; the wizard walks you through every step. |
140
+ | Meta Ads | yes | yes | yes | OAuth via `oauth.spaceads.agency` → System User access token (Facebook Login for Business, non-expiring) → encrypted in `oauth_vault`. CLI fetches on demand by license key; nothing plaintext on disk. |
141
+ | TikTok Ads | yes | yes | yes | OAuth via `oauth.spaceads.agency` → access token (verified Marketing API app, non-expiring) → encrypted in `oauth_vault`. Same on-demand fetch model as Meta. |
142
+ | GA4 | yes | yes | n/a | OAuth via `oauth.spaceads.agency`, or upload your own service-account JSON. |
143
+ | LinkedIn Ads | not yet | n/a | n/a | Placeholder; spec sheet at `src/spaceads_os/knowledge/creative_specs/linkedin.md`. |
144
+
145
+ > Why is Google Ads different on auth? Google's policy requires every heavy API user to hold their own developer token with `basic_access` or higher, and that token can only be issued from a Manager Account (MCC). Sharing a single token across customers does not pass review. Solo operators with only a regular Google Ads account: create an MCC at <https://ads.google.com/aw/accounts/managers/> (free, ~10 min) and link your existing account before applying for the developer token.
146
+
147
+ ## License model
148
+
149
+ - **Monthly subscription with auto-renewal.** Pay monthly, the CLI keeps running while the subscription is active. When the subscription is canceled or a renewal payment fails, the CLI hard-blocks at the end of the paid cycle.
150
+ - **Updates included** for the lifetime of the subscription — new channels, new safety patterns, schema migrations are pulled automatically while the subscription is active.
151
+ - **Hardware-soft-bound.** Moving to a new laptop is fine; the system flags unusual fingerprint churn for review but does not block.
152
+ - **License recovery** by email at any time from the customer dashboard at `https://academy.spaceads.agency/account/subscription`.
153
+ - **Cancel anytime.** End-of-cycle cancellation, no proration. Local data, audit logs, briefs and credentials stay untouched on disk after cancellation.
154
+
155
+ ## Documentation
156
+
157
+ Full docs at [academy.spaceads.agency/space-ads-os/docs](https://academy.spaceads.agency/space-ads-os/docs). The site is built from `docs/` with mkdocs-material; install the `[docs]` extra to build it locally:
158
+
159
+ ```bash
160
+ pip install "spaceads-os[docs]"
161
+ mkdocs build --strict
162
+ ```
163
+
164
+ Local entry points:
165
+
166
+ - [Buyer quickstart](docs/sales/buyer-quickstart.md) — five minutes from install to first audit, first report, first creative, first mutation
167
+ - [Slash commands catalog](docs/commands.md) — auto-generated from the live `.claude/commands/`
168
+ - [Subagents catalog](docs/agents.md) — auto-generated from the live `.claude/agents/`
169
+ - [Troubleshooting](docs/troubleshooting.md) — first-run failures and how to recover
170
+
171
+ The full knowledge base ships inside the package at `src/spaceads_os/knowledge/`. Each channel and analytics tool gets one self-contained file with setup, structure, bidding, audience, creative, measurement, KPIs, deprecated features, and Space Ads OS automation in one place:
172
+
173
+ - [Quickstart](src/spaceads_os/knowledge/reference/quickstart.md) — five minutes from install to first audit
174
+ - [Writing a client brief](src/spaceads_os/knowledge/reference/client_brief.md)
175
+ - [Agent catalog](src/spaceads_os/knowledge/reference/agent_catalog.md) — when each subagent activates and what files it can touch
176
+ - Channels: [Google Ads](src/spaceads_os/knowledge/channels/google_ads.md), [Meta Ads](src/spaceads_os/knowledge/channels/meta_ads.md), [TikTok Ads](src/spaceads_os/knowledge/channels/tiktok_ads.md)
177
+ - Analytics: [GA4](src/spaceads_os/knowledge/analytics/ga4.md), [Merchant Center](src/spaceads_os/knowledge/analytics/merchant_center.md), [GTM / server-side GTM](src/spaceads_os/knowledge/analytics/gtm.md)
178
+ - Creative specs: [overview](src/spaceads_os/knowledge/concepts/creative_specs.md), [Meta](src/spaceads_os/knowledge/creative_specs/meta.md), [Google Ads](src/spaceads_os/knowledge/creative_specs/google_ads.md), [TikTok](src/spaceads_os/knowledge/creative_specs/tiktok.md)
179
+ - Cross-cutting concepts: attribution windows, learning phase, creative testing, dual Pixel+CAPI tracking, blended ROAS, consent / privacy / ATT, budget bands — see `src/spaceads_os/knowledge/concepts/`
180
+ - Vertical playbooks: DTC e-commerce, lead-gen B2C, B2B / SaaS, mobile app, local / multi-location — see `src/spaceads_os/knowledge/playbooks/`
181
+
182
+ ## Support
183
+
184
+ Email `support@spaceads.agency`.
185
+
186
+ ## License
187
+
188
+ Commercial. See [LICENSE](LICENSE).