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.
- spaceads_os-0.3.0/LICENSE +81 -0
- spaceads_os-0.3.0/PKG-INFO +335 -0
- spaceads_os-0.3.0/README.md +188 -0
- spaceads_os-0.3.0/pyproject.toml +105 -0
- spaceads_os-0.3.0/setup.cfg +4 -0
- spaceads_os-0.3.0/src/spaceads_os/__init__.py +4 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/CLAUDE.md +148 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/__init__.py +91 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/agents/brand-extractor.md +147 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/agents/creative-director.md +160 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/agents/mutation-reviewer.md +96 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/agents/onboarding-coach.md +131 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/agents/report-builder.md +95 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-agency.md +43 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-brand.md +91 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-brief.md +50 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-bucketing.md +135 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-cadence.md +87 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-changes.md +77 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-check.md +51 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-client.md +76 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-create.md +87 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-creative.md +151 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-ga4.md +45 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-geo.md +82 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-grow.md +159 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-intel.md +87 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-keyword-research.md +79 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-modify.md +258 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-monitor.md +76 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-onboard.md +194 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-overview.md +39 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-report.md +177 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-seasonal.md +96 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-strategy.md +86 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/commands/spaceads-whitelabel.md +81 -0
- spaceads_os-0.3.0/src/spaceads_os/_scaffold/settings.json +30 -0
- spaceads_os-0.3.0/src/spaceads_os/_setup_wizard.py +817 -0
- spaceads_os-0.3.0/src/spaceads_os/audit/__init__.py +13 -0
- spaceads_os-0.3.0/src/spaceads_os/audit/upstream.py +140 -0
- spaceads_os-0.3.0/src/spaceads_os/brand/__init__.py +50 -0
- spaceads_os-0.3.0/src/spaceads_os/brand/__main__.py +187 -0
- spaceads_os-0.3.0/src/spaceads_os/brand/schema.py +105 -0
- spaceads_os-0.3.0/src/spaceads_os/brand/scraper.py +509 -0
- spaceads_os-0.3.0/src/spaceads_os/brand/store.py +208 -0
- spaceads_os-0.3.0/src/spaceads_os/brand/validator.py +123 -0
- spaceads_os-0.3.0/src/spaceads_os/cli.py +114 -0
- spaceads_os-0.3.0/src/spaceads_os/context/__init__.py +23 -0
- spaceads_os-0.3.0/src/spaceads_os/context/brief_loader.py +277 -0
- spaceads_os-0.3.0/src/spaceads_os/creative/__init__.py +42 -0
- spaceads_os-0.3.0/src/spaceads_os/creative/__main__.py +283 -0
- spaceads_os-0.3.0/src/spaceads_os/creative/brief_generator.py +314 -0
- spaceads_os-0.3.0/src/spaceads_os/creative/exporter.py +113 -0
- spaceads_os-0.3.0/src/spaceads_os/creative/specs.py +654 -0
- spaceads_os-0.3.0/src/spaceads_os/creative/wireframe.py +303 -0
- spaceads_os-0.3.0/src/spaceads_os/credentials.py +182 -0
- spaceads_os-0.3.0/src/spaceads_os/ga4/__init__.py +301 -0
- spaceads_os-0.3.0/src/spaceads_os/ga4/auth.py +176 -0
- spaceads_os-0.3.0/src/spaceads_os/ga4/client.py +430 -0
- spaceads_os-0.3.0/src/spaceads_os/ga4/scripts/__init__.py +4 -0
- spaceads_os-0.3.0/src/spaceads_os/ga4/scripts/conversion_event_audit.py +206 -0
- spaceads_os-0.3.0/src/spaceads_os/ga4/scripts/cross_device_attribution.py +167 -0
- spaceads_os-0.3.0/src/spaceads_os/ga4/scripts/custom_definitions_audit.py +160 -0
- spaceads_os-0.3.0/src/spaceads_os/ga4/scripts/data_quality_check.py +176 -0
- spaceads_os-0.3.0/src/spaceads_os/ga4/scripts/ecommerce_audit.py +215 -0
- spaceads_os-0.3.0/src/spaceads_os/ga4/scripts/full_audit.py +151 -0
- spaceads_os-0.3.0/src/spaceads_os/ga4/scripts/landing_page_quality.py +157 -0
- spaceads_os-0.3.0/src/spaceads_os/ga4/scripts/quick_check.py +183 -0
- spaceads_os-0.3.0/src/spaceads_os/ga4/scripts/traffic_source_analysis.py +217 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/__init__.py +60 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/account_config.py +148 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/cache.py +224 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/cadence.py +341 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/client.py +220 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/experiments.py +249 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/feed_title_locales.py +77 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/ga4_helper.py +711 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/gaql_validator.py +204 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/intel.py +382 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/landing_page_locales.py +116 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/merchant_center.py +438 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/mutations.py +3142 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/safety.py +1023 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/__init__.py +0 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/account_info.py +124 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/account_settings_check.py +178 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/action_items.py +122 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/ad_text_manager.py +150 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/add_negatives.py +206 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/add_shared_negatives.py +84 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/alert_check.py +1276 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/auction_insights.py +127 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/audience_audit.py +110 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/bestseller_gap_analysis.py +552 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/brand_demand_analysis.py +102 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/bucketing.py +455 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/budget_pacing.py +199 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/bulk_operations.py +93 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/cadence_status.py +330 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/campaign_watchdog.py +109 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/cart_data_analysis.py +247 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/change_history.py +494 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/check_ad_texts.py +21 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/check_audiences.py +77 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/condensed_check.py +1644 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/create_conversions.py +265 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/cvr_responsibility.py +106 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/daily_digest.py +165 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/dashboard_html.py +97 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/deep_diagnosis.py +139 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/device_performance.py +991 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/exclude_products.py +120 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/experiment_stats.py +159 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/export_sheets.py +89 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/feed_optimizer.py +1269 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/feed_title_optimizer.py +921 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/fix_destination_not_working.py +86 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/frequency_reach.py +238 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/full_audit.py +1352 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/generate_pdf.py +63 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/geo_analysis.py +1178 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/grow_audit.py +534 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/intel_digest.py +374 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/intel_fetch.py +436 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/keyword_planner.py +121 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/landing_page_check.py +1455 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/lower_troas_search.py +120 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/mc_diagnostics.py +338 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/mom_performance.py +121 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/monthly_review.py +150 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/pmax_channel_performance.py +802 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/product_analysis.py +445 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/quick_check.py +165 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/rules_engine.py +102 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/search_terms_analyzer.py +972 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/seasonal_check.py +439 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/seasonal_setup.py +234 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/set_bestseller_listing_groups.py +502 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/slack_formatter.py +55 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/spam_placements.py +99 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/swap_headline.py +25 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/switch_to_max_conv_value.py +28 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/unlink_headline.py +22 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/update_bidding_strategy.py +95 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/update_budget.py +151 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/update_geo_targeting.py +65 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/update_troas.py +161 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/website_scanner.py +139 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/weekly_digest.py +172 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/scripts/yoy_compare.py +95 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/seasonal.py +363 -0
- spaceads_os-0.3.0/src/spaceads_os/google_ads/utils.py +98 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/README.md +125 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/__init__.py +9 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/analytics/ga4.md +212 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/analytics/gtm.md +163 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/analytics/merchant_center.md +159 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/cadence_defaults.yaml +62 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/channels/google_ads.md +222 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/channels/meta_ads.md +273 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/channels/tiktok_ads.md +443 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/concepts/attribution_windows.md +63 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/concepts/blended_roas.md +66 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/concepts/budget_bands.md +99 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/concepts/consent_privacy_att.md +71 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/concepts/creative_specs.md +95 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/concepts/creative_testing.md +77 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/concepts/learning_phase.md +73 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/concepts/pixel_capi_dual_tracking.md +79 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/conversion_plans/funnel_example.yaml +65 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/creative_specs/google_ads.md +95 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/creative_specs/linkedin.md +57 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/creative_specs/meta.md +102 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/creative_specs/tiktok.md +108 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/intel_sources.yaml +260 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/playbooks/b2b_saas.md +113 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/playbooks/dtc_ecommerce.md +134 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/playbooks/lead_gen_b2c.md +106 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/playbooks/local_multi_location.md +104 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/playbooks/mobile_app.md +105 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/reference/agency_mode.md +86 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/reference/agent_catalog.md +84 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/reference/client_brief.md +203 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/reference/errors.json +139 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/reference/glossary.md +59 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/reference/multichannel.md +56 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/reference/quickstart.md +125 -0
- spaceads_os-0.3.0/src/spaceads_os/knowledge/seasonal_calendar.yaml +323 -0
- spaceads_os-0.3.0/src/spaceads_os/license/__init__.py +61 -0
- spaceads_os-0.3.0/src/spaceads_os/license/__main__.py +107 -0
- spaceads_os-0.3.0/src/spaceads_os/license/exceptions.py +35 -0
- spaceads_os-0.3.0/src/spaceads_os/license/seat.py +82 -0
- spaceads_os-0.3.0/src/spaceads_os/license/updater.py +89 -0
- spaceads_os-0.3.0/src/spaceads_os/license/verify.py +258 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/__init__.py +69 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/ads.py +171 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/adsets.py +206 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/analysis.py +245 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/api_utils.py +181 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/audit.py +370 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/auth.py +171 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/blended.py +157 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/bulk.py +302 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/campaigns.py +202 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/client.py +201 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/clients_config.py +135 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/config.py +42 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/diagnostics.py +971 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/ga4.py +259 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/insights.py +173 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/optimization.py +549 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/reporting.py +430 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/rules.py +692 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/safety.py +436 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/__init__.py +4 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/_cli_common.py +142 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/add_negative_audience.py +117 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/audience_overlap.py +164 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/creative_rotation.py +143 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/daily_digest.py +119 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/enable_campaign.py +69 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/frequency_audit.py +121 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/full_audit.py +107 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/pause_campaign.py +71 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/pixel_capi_health.py +184 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/placement_breakdown.py +179 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/quick_check.py +151 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/update_bid.py +119 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/scripts/update_budget.py +185 -0
- spaceads_os-0.3.0/src/spaceads_os/meta_ads/trends.py +289 -0
- spaceads_os-0.3.0/src/spaceads_os/migrations/__init__.py +1 -0
- spaceads_os-0.3.0/src/spaceads_os/migrations/m0001_add_brand_system.py +112 -0
- spaceads_os-0.3.0/src/spaceads_os/multichannel/__init__.py +9 -0
- spaceads_os-0.3.0/src/spaceads_os/multichannel/attribution_compare.py +159 -0
- spaceads_os-0.3.0/src/spaceads_os/multichannel/budget_allocation.py +139 -0
- spaceads_os-0.3.0/src/spaceads_os/multichannel/overview.py +188 -0
- spaceads_os-0.3.0/src/spaceads_os/onboarding/__init__.py +32 -0
- spaceads_os-0.3.0/src/spaceads_os/onboarding/operator.py +149 -0
- spaceads_os-0.3.0/src/spaceads_os/onboarding/sentinel.py +62 -0
- spaceads_os-0.3.0/src/spaceads_os/onboarding/session_check.py +75 -0
- spaceads_os-0.3.0/src/spaceads_os/reports/__init__.py +14 -0
- spaceads_os-0.3.0/src/spaceads_os/reports/branding.py +125 -0
- spaceads_os-0.3.0/src/spaceads_os/reports/runner.py +566 -0
- spaceads_os-0.3.0/src/spaceads_os/reports/templates/00_brand_kit.html +383 -0
- spaceads_os-0.3.0/src/spaceads_os/reports/templates/01_executive_summary.html +200 -0
- spaceads_os-0.3.0/src/spaceads_os/reports/templates/02_ecommerce_performance.html +246 -0
- spaceads_os-0.3.0/src/spaceads_os/reports/templates/03_leadgen_performance.html +265 -0
- spaceads_os-0.3.0/src/spaceads_os/reports/templates/04_brand_awareness.html +215 -0
- spaceads_os-0.3.0/src/spaceads_os/reports/templates/05_social_engagement.html +204 -0
- spaceads_os-0.3.0/src/spaceads_os/reports/templates/06_content_analysis.html +233 -0
- spaceads_os-0.3.0/src/spaceads_os/reports/templates/07_local_business.html +236 -0
- spaceads_os-0.3.0/src/spaceads_os/reports/templates/08_growth_roadmap.html +461 -0
- spaceads_os-0.3.0/src/spaceads_os/reports/templates/09_bucketing_proposal.html +517 -0
- spaceads_os-0.3.0/src/spaceads_os/reports/templates/10_experiment_verdict.html +328 -0
- spaceads_os-0.3.0/src/spaceads_os/reports/templates/11_competitive_landscape.html +271 -0
- spaceads_os-0.3.0/src/spaceads_os/reports/templates/12_feed_health.html +280 -0
- spaceads_os-0.3.0/src/spaceads_os/reports/templates/13_seasonal_calendar.html +322 -0
- spaceads_os-0.3.0/src/spaceads_os/reports/templates/README.md +57 -0
- spaceads_os-0.3.0/src/spaceads_os/reports/templates/_assets/brand.css +359 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/__init__.py +105 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/account_config.py +131 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/adgroups.py +255 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/ads.py +169 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/analysis.py +173 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/api_utils.py +122 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/audiences.py +314 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/auth.py +485 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/blended.py +148 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/bulk.py +225 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/campaigns.py +243 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/client.py +445 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/config.py +75 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/creatives.py +227 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/diagnostics.py +348 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/ga4.py +77 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/insights.py +285 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/optimization.py +896 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/pixel.py +254 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/reporting.py +212 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/reports_async.py +198 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/rules.py +482 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/safety.py +406 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/__init__.py +1 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/_cli_common.py +101 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/audience_consolidation.py +88 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/capi_diagnostic.py +119 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/creative_rotation.py +113 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/daily_digest.py +85 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/enable_campaign.py +76 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/full_audit.py +119 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/gmv_max_check.py +89 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/pause_campaign.py +78 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/quick_check.py +143 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/smart_plus_readiness.py +109 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/update_bid.py +94 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/scripts/update_budget.py +109 -0
- spaceads_os-0.3.0/src/spaceads_os/tiktok_ads/trends.py +207 -0
- spaceads_os-0.3.0/src/spaceads_os.egg-info/PKG-INFO +335 -0
- spaceads_os-0.3.0/src/spaceads_os.egg-info/SOURCES.txt +314 -0
- spaceads_os-0.3.0/src/spaceads_os.egg-info/dependency_links.txt +1 -0
- spaceads_os-0.3.0/src/spaceads_os.egg-info/entry_points.txt +3 -0
- spaceads_os-0.3.0/src/spaceads_os.egg-info/requires.txt +49 -0
- spaceads_os-0.3.0/src/spaceads_os.egg-info/top_level.txt +1 -0
- spaceads_os-0.3.0/tests/test_agents_present.py +240 -0
- spaceads_os-0.3.0/tests/test_audit_upstream.py +116 -0
- spaceads_os-0.3.0/tests/test_command_catalog.py +218 -0
- spaceads_os-0.3.0/tests/test_license_check_latency.py +154 -0
- spaceads_os-0.3.0/tests/test_no_agency_artifacts.py +104 -0
- spaceads_os-0.3.0/tests/test_no_polish.py +104 -0
- spaceads_os-0.3.0/tests/test_onboarding_operator.py +114 -0
- spaceads_os-0.3.0/tests/test_onboarding_session_check.py +72 -0
- spaceads_os-0.3.0/tests/test_plugin.py +101 -0
- spaceads_os-0.3.0/tests/test_report_runner.py +301 -0
- spaceads_os-0.3.0/tests/test_scaffold.py +98 -0
- spaceads_os-0.3.0/tests/test_seat_token.py +159 -0
- 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).
|