tldr; built for founders, solo operators, and lean growth teams, advibe empowers a single person to take full ownership of the entire paid acquisition lifecycle: from cultural research and paid creative production to live ad performance, conversion analysis, and post-click optimization. In the pre-AI era, owning these business growth metrics required a team and $25,000/month retainers. In the LLM wrapper era, culturally blind chatbots gave you generic ad copy in a chat bubble but left the hardest 90% of execution untouched. Welcome to the agentic era: by wiring an autonomous execution harness into Qloo’s 250M+ entity Taste Graph and the Meta Marketing API (and more connectors to be integrated), advibe gives one operator the power to research, launch, monitor, and compound hard revenue metrics (CTR, CPA, ROAS, and conversion rate) end to end.

Inspiration

In modern performance marketing, there is a dirty secret: post-iOS14 and inside Meta’s Advantage+ auction, Creative IS the New Targeting. Meta deprecated thousands of granular interest checkboxes; today, the visual aesthetic, sonic pacing, neighborhood callouts, and cultural references inside your ad determine who stops scrolling and Meta’s neural network routes 90% of your impressions based on that early engagement signal.

Yet every "AI ad generator" on the market is culturally blind. Ask a generic LLM to build an ad campaign for a new ceremonial matcha drink in NYC or an artisanal Espadín mezcal in Austin, and it guesses. It targets "Health-conscious Millennials aged 25–34" and writes soulless AI slop ("Elevate your everyday journey with our curated, authentic blend!"). Real people scroll right past it, click-through rates tank, and Customer Acquisition Cost (CAC) skyrockets.

Meanwhile, top brands pay cultural strategy agencies like Wieden+Kennedy $25,000+/month to find Cultural Arbitrage: discovering that people who buy Casamigos and hang out at Soho House in Austin mathematically over-index by 90%+ on Khruangbin, Vinyl Lounges, and specific walkable blocks of South Congress and East 6th.

We built Advibe-"Devin for Culturally Grounded Ad Campaigns"-to democratize that agency stack. By wiring an autonomous multi-agent harness directly into Qloo’s 250M+ entity Taste Graph, Advibe takes a founder from a 1-sentence brief to three non-overlapping, culturally grounded Meta Ad Set strategies, multi-format ad creatives, and a staged PAUSED Meta Marketing API campaign in under 60 seconds.


What it does

Advibe is an autonomous cultural ad agency and campaign execution harness built around a Devin-style two-workflow architecture (Ask → Session):

1. The Ask Workflow: Interactive Cultural Scoping & Signal Lock

Most founders don't write complete cultural briefs on their first try-and most don't realize that Qloo's superpower is cross-domain taste bridging (combining a consumer brand + a music artist + a film studio to define an audience).

  • When a user enters an incomplete prompt like "I have a brand called Chaen - it's a matcha energy drink" and hits ENTER, Advibe initiates the Ask Workflow (/api/ask).
  • Instead of silently hallucinating seeds in the background, the Ask Agent evaluates the 4 Qloo Readiness Pillars:
    1. Brand & Product Category
    2. Target Metro (location_query) - required for Qloo urn:heatmap and urn:entity:place
    3. 2+ Cross-Domain Cultural Seeds - verified in Qloo across urn:entity:brand, urn:entity:artist, urn:entity:movie, or urn:entity:place
    4. 1 Category Competitor Brand - verified as urn:entity:brand for head-to-head /v2/analysis/compare
  • The agent talks back to the user and queries Qloo /search and /v2/tags in real time to present clickable, pre-verified Qloo suggestion pills (e.g., Chamberlain Coffee, Erewhon, Clairo, Ryuichi Sakamoto vs. Red Bull in New York, NY). Once all 4 pillars are locked, Advibe synthesizes the master crafted_prompt and unlocks the Start Session gate.

2. The Session Workflow: 6-API Qloo Fanout & Zero-Overlap Tribe Architecture

Clicking Start Session opens the Devin Split-Screen Workspace:

  • Left Panel (Live Agent Execution Stream): Streams real-time Server-Sent Events (SSE) with dynamic Spinner Verbs (phase_change) and live Qloo HTTP tool-call latency badges (qloo_call).
  • Right Collapsible Panel (Live Workspace Artifacts): Progressively hydrates interactive tabs mid-stream as Qloo data arrives-starting with the Signal Graph, then the Interactive Geo-Heatmap & Walkable Venue Map, Demographic Lift Charts, and finally the 3 Tribe Ad Campaigns.

To solve the #1 cause of wasted ad spend-Meta Auction Overlap (where an advertiser's own ad sets bid against each other for the same people)-Advibe deterministically slices Qloo’s Taste Graph into 3 mathematically distinct Cultural Tribes (3 Ad Sets):

  1. Tribe 1 - core_high_affinity (The Core Insider Lock): Anchored on high-affinity mainstream crossover entities (popularity >= 0.72), assigned to Geo-Pin #1 (1.0-mile radius) + its 3 nearest walkable Qloo venues (urn:entity:place), and targeted to the aggregate peak demographic age cohort.
  2. Tribe 2 - underground_arbitrage (Subculture / Low-CPM Arbitrage): Ranked by our Cultural Arbitrage Score (Affinity / max(0.35, Popularity)) to isolate high-affinity, lower-saturation underground artists, indie films, and boutique labels where ad competition is low, assigned to Geo-Pin #2 (>= 0.012° / ~1.2 km away from Pin #1) and skewed to the artist-seed demographic cohort.
  3. Tribe 3 - competitor_conquest (The Category Switcher): Grounded in Qloo’s /v2/analysis/compare delta between our seed entities (Group A) and the rival brand (Group B, e.g., Jo Malone, Don Julio, or Red Bull), isolating the exact cultural tags where our audience over-indexes vs. the incumbent, assigned to Geo-Pin #3.

3. Multi-Format Creative Execution & One-Click PAUSED Meta Campaign Staging

For each of the 3 Tribes, Advibe generates and strictly validates a 250–350 word cultural_system_prompt, then executes those prompts in parallel to produce:

  • Deployable Meta Ad Copy: primary_text, headline, description, call_to_action, and UTM-tagged destination URLs.
  • 3 Testable Cultural Hooks: Thumbstop opening lines explicitly citing the Qloo entities that inspired them.
  • 15-Second Reel / TikTok Beat Sheet: [0–3s Hook], [3–10s Hold], and [10–15s CTA] shot lists with sonic direction tied to Qloo urn:entity:artist results and color-grading/film-stock direction tied to Qloo urn:entity:movie results.
  • Hyper-Local OOH (Out-of-Home) Venue Briefs: Street-level poster headlines and placement logic anchored to the exact walkable Qloo venues (urn:entity:place) inside each geo-pin (e.g., Engawa, Liberty London, and sketch in Soho; Casa Cruz in Notting Hill).
  • One-Click "Deploy to Meta (Paused)": Packages the entire hierarchy (1 Campaign → 3 Ad Sets with 1.0-mile lat/lon pins, age/gender locks, and advantage_audience: 0 → 3 Ad Creatives → 3 Ads, all in PAUSED safety state) for live Meta Graph API v21.0 deployment or instant JSON/cURL inspection.

Why Advibe is Impossible Without Qloo: An LLM has no mathematical knowledge of which subcultures in Southwark vs. Soho over-index on FKA twigs + Byredo, which exact latitude/longitude blocks in Austin over-index on Casamigos + Khruangbin, what age cohorts positively vs. negatively index on those seeds, or what taste tags diverge between Aesop and Jo Malone. Every targeting coordinate, age bracket, venue callout, sonic cue, and visual reference in Advibe is deterministically derived from Qloo’s API.


How we built it

System Architecture

[User Brief] ──► [Ask Workflow: /api/ask] ──► Qloo /search & /v2/tags (Live Pill Verification)
                        │
                        ▼ (Locks 4 Pillars -> resolved_signals JSON)
              [Session Stream: /api/session/stream (SSE)]
                        │
        ┌───────────────┼───────────────┬────────────────┐
        ▼               ▼               ▼                ▼
  [Cross-Domain]  [Demographics]  [Geo-Heatmap +]  [Competitor]
  /v2/insights    urn:demographics urn:entity:place /v2/analysis/compare
  (artist, movie, (-1..+1 lift)   + Nominatim      + /v2/trending
   podcast, brand,                 Walkable Pins
   tag + explain)
        └───────────────┴───────────────┴────────────────┘
                        │
                        ▼
        [Deterministic Zero-Overlap Packet Slicer]
        Slices Entities, Venues, Ages & 3 Geo-Pins
        into Tribe 1 (Core), Tribe 2 (Arbitrage), Tribe 3 (Conquest)
                        │
                        ▼
        [Parallel Strategy & Validator Loop (LLM + AST/Regex Verifier)]
        Enforces 100% required Qloo entity mentions & scrubs 42 banned clichés
                        │
                        ▼
        [Creative Producer + Meta Marketing API v21.0 Stager]
        Builds Campaign -> 3 Ad Sets -> 3 Ad Creatives -> 3 Ads (PAUSED)

Deep Qloo API Integration (8 Endpoints / Modes)

Qloo Endpoint / Filter Exact Parameters Used How Advibe Uses the Output
Entity Search (GET /search) query, types=urn:entity:brand (for competitors), take=5 Resolves seed inspirations and rival brands into verified Qloo UUIDs with LLM-Judge disambiguation.
Tag Search (GET /v2/tags) filter.query, feature.semantic_search=true, take=5 Maps product & subculture keywords into canonical Qloo urn:tag:* URNs for /v2/insights.
Cross-Domain Insights (GET /v2/insights) filter.type in {artist, movie, podcast, brand}, signal.interests.entities, signal.interests.tags, signal.location.query, feature.explainability=true Extracts the exact musicians, films, podcasts, and adjacent brands for creative direction, preserving per-entity explainability weights (top_signal).
Taste Vocabulary (GET /v2/insights) filter.type=urn:tag, signal.interests.entities, filter.tag.types Discovers emergent cultural taste tags from the seed entities to ground copywriting tone.
Demographics (GET /v2/insights) filter.type=urn:demographics, signal.interests.entities, signal.interests.tags Parses -1.0 to +1.0 age/gender lift indices per seed entity to set distinct age_min, age_max, and genders per Meta Ad Set.
Local Venues (GET /v2/insights) filter.type=urn:entity:place, filter.location.query, feature.explainability=true Finds real local cafes, bars, boutiques, and galleries in the target city for OOH placements and walkable pin anchoring.
Geo-Heatmaps (GET /v2/insights) filter.type=urn:heatmap, filter.location.query, signal.interests.entities Extracts high-affinity (latitude, longitude, geohash) clusters to build non-overlapping 1.0-mile Meta custom_locations geo-fences.
Competitor Compare & Trending (GET /v2/analysis/compare, /v2/trending) a.signal.interests.entities vs. b.signal.interests.entities; filter.start_date, filter.end_date Computes shared category overlap vs. a_only_tags cultural divergence for Conquest Ad Sets, paired with cultural arbitrage scoring.

Tech Stack

  • Backend (advibe-backend): Python 3.12, FastAPI, custom thread-safe HTTP keep-alive connection pool (_HttpConnectionPool) with a slot-reserving rate limiter (0.22s interval = <= 4.5 req/s to respect Qloo's 5 req/s cap without holding locks during I/O), ThreadPoolExecutor for 10-way parallel Qloo fanout, OpenStreetMap Nominatim reverse-geocoding, and Server-Sent Events (StreamingResponse) for real-time progress telemetry.
  • Frontend (advibe-frontend): React, TypeScript, Tailwind CSS, interactive map rendering for Qloo Geo-Heatmaps & 1-mile Ad Set radius circles, and a Devin-inspired 2-pane workspace with collapsible artifact drawers.

Challenges we ran into

Building against real-world cultural data exposed several fascinating edge cases that we solved in our engineering pipeline:

  1. The "Espadín" → "Sword" Semantic Trap & Same-Name Entity Collisions: When testing a campaign for Humo Santo (an artisanal Espadín mezcal), Qloo’s semantic /v2/tags search translated the Spanish word espadín ("small sword", referring to the agave leaf shape) to urn:tag:keyword:qloo:sword ("Sword"). Meanwhile, an untyped /search?query=Don Julio returned a Buenos Aires steakhouse (urn:entity:place) instead of Don Julio the tequila brand (urn:entity:brand).

    • How we fixed it: We built a top-K candidate fetcher paired with a domain-aware LLM Disambiguation Judge and strict subtype rules (competitors must resolve to urn:entity:brand; literal mistranslations and structural packaging tags are automatically pruned before hitting /v2/insights).
  2. Qloo Demographics Are -1.0 to +1.0 Lift Indices, Not Shares: Live testing revealed that filter.type=urn:demographics returns per-seed over/under-indexing lift scores (-1.0 to +1.0), not percentages summing to 100%.

    • How we fixed it: We wrote parse_demographics() to compute both an aggregate mean across all seeds and an artist-seed specific skew (e.g., isolating FKA twigs’s 30_to_34: +0.38 lift separately from Byredo’s aggregate skew). This allowed us to assign mathematically distinct age brackets to each of the 3 Meta Ad Sets (33–49, 22–34, 28–44) while automatically flagging strongly negative cohorts (< -0.15, like 55_and_older: -0.57) as ad-spend exclusions.
  3. Unnamed Heatmap Geohashes & "Geo-Pins in the Water": Qloo’s urn:heatmap returns raw latitude, longitude, and geohash values without neighborhood names-and in coastal cities (like San Francisco, NYC, or London), high-affinity geohash centroids can land on water, bridges, or uninhabited islands.

    • How we fixed it: We engineered select_walkable_pins(), which cross-checks every Qloo urn:heatmap coordinate against the coordinates of returned Qloo urn:entity:place venues using Haversine distance (<= 1.5 km walkable threshold), enforces a 0.012° (~1.2 km) minimum separation between pins so Meta Ad Sets don't overlap, reverse-geocodes each pin via Nominatim (zoom=17/18), and automatically rejects and replaces any pin labeled as water, bridge, island, or airport.
  4. Preventing LLM "Marketing Slop" Drift: Even when given rich Qloo JSON, LLMs love slipping back into generic ad-speak ("elevate", "unlock", "curated journey", "where tradition meets").

    • How we fixed it: We built a deterministic validator (_validate_one_strategy) that verifies every single assigned Qloo artist, film, venue, brand, taste tag, neighborhood label, and competitor name appears in the generated strategy, scrubs 42 banned marketing clichés (scrub_banned_phrases), and triggers an isolated self-healing repair pass (_repair_llm_strategy) if any entity is missing.

Accomplishments that we're proud of

  • The Ask → Session Devin Workflow: Turning vague user prompts into Qloo-verified multi-domain signal packets interactively via pre-verified Qloo suggestion chips-so the Session workflow starts with 100% verified UUIDs and zero wasted guesswork.
  • Sub-40-Second Parallel Orchestration: Firing 10+ Qloo API endpoints, reverse-geocoding 3 walkable neighborhood pins, slicing 3 zero-overlap cultural packets, and generating + validating 3 complete strategies in parallel while streaming every step live over SSE.
  • True Zero-Overlap Ad Set Slicing: Guaranteeing that no two tribes ever share the same Qloo artist, movie, podcast, brand, local venue, geo-pin, or age bracket-solving Meta Auction Overlap using Qloo’s Taste Graph.
  • End-to-End Agency Output: Going all the way from cultural taste discovery to deployable Meta PAUSED Campaign → Ad Set → Ad Creative → Ad payloads.

What we learned

  • Cross-Domain Seeds Unlock Exponentially Better Cultural Signal: Passing Qloo a single seed type (e.g., two beverage brands) yields expected category results. Passing a triad across domains (e.g., Byredo [brand] + Aesop [brand] + FKA twigs [artist]) activates Qloo’s feature.explainability graph in a way that surfaces non-obvious, high-converting connections (like Call Me by Your Name film grading + Engawa in Soho + Acne Studios).
  • Popularity vs. Affinity is the Ultimate Media-Buying Signal: By combining Qloo’s query.affinity with entity popularity (Arbitrage Score = Affinity / max(0.35, Popularity)), we can systematically separate Mainstream Social Proof (high affinity, high popularity) from Underground Cultural Arbitrage (high affinity, moderate saturation)-giving growth teams a mathematical formula for finding low-CPM ad inventory.

What's next for advibe

  1. Closed-Loop Performance Monitoring & Qloo Creative Rotation (Phase 2): Connecting live Meta Insights (GET /<adset_id>/insights) on a schedule to monitor CTR, Frequency, CPA, and ROAS. When an Ad Set hits Creative Fatigue (Frequency > 3.5 and declining CTR), Advibe will automatically pull the next unused high-arbitrage Qloo entities from that tribe's packet, generate Creative v2, pause the fatigued ad, and rotate in the fresh creative without resetting Meta’s Learning Phase.
  2. "Chameleon" Tribe-Matched Micro-Landing Pages: Automatically deploying 3 dynamic post-click landing pages whose visual palette, copy, and local venue callouts ("Spotted near Engawa & Liberty London in Soho") match the exact Tribe Ad Set that drove the click.
  3. Autonomous Guerrilla OOH & Podcast Deal-Flow: Turning the discovered Qloo urn:entity:place venues and urn:entity:podcast shows into automated outbound sponsorship and physical pop-up pitches backed by Qloo affinity proof.

Built With

Share this project:

Updates

Submission history