Dynamic Persona API — now in beta

Stop showing the same banner
to every visitor.

Most retailers serve generic banners — wasting 15-30% of potential conversions on mismatched creative. For a chain doing $1M/mo in banner-attributed revenue, that’s $150k–$300k left on the table every month.

Busyfolders Persona API infers visitor taste from location and context, returns the ideal banner plus an impression_id for conversion tracking. One call, under 60ms.

No ML team. No months of build. Your CMS, your content, your data.

No browser fingerprints. No cookies. Just public data and ZIP codes.

Stores in production·60ms avg latency·6000 req/min per key·15% ε-greedy exploration·Sandbox: free, no card
Trusted in production by regional retailers and franchise chains representing hundreds of locations. Seamlessly integrates with your existing CMS and commerce platform.
curl -X POST https://busyfolder.com/api/persona/select -H "Authorization: Bearer sk_..." -H "Content-Type: application/json" -d '{"context":{"zip":"94102"},"banners":["b1","b2","b3"]}'
Sample response
{ "banner_id":"b2", "external_id":"dato-123", "confidence":0.87, "impression_id":"imp_8a2f", "tags":["coffee_culture","affluent"] }

Works with your existing stack

DatoCMS
Shopify
WordPressComing soon
BigCommerceComing soon
Any CMS

Bring your own CMS, your own content, your own data. No vendor lock-in, no replatforming required.

Why it matters

What works in Miami

Probably won’t work in Minneapolis.

Every city has a different rhythm. Different weather. Different crowds. Different needs. Your banners should match the moment.

Miami Beach, FL

Peak summer — 92°F

  • Beach season — tourists everywhere
  • Festival crowds filling the streets
  • Outdoor dining, late nights
  • High tourism traffic — higher willingness to spend

Best banner match

☀️ BEACH

Summer Collection

Minneapolis, MN

Deep winter — 18°F

  • Staying in — comfort food season
  • Hockey & indoor activities peak
  • Warm gear & home delivery demand
  • Budget-conscious, value-focused shoppers

Best banner match

❄️ WINTER

Comfort Collection

Same brand. Same day. Completely different visitors.

Busyfolder detects the difference and serves the right banner — in under 60ms.

Adoption

Stores powered across regional retail chains

15+ real-world signals monitored per location

Speed to value

First API call in under 90 seconds

Including reading the docs. Sandbox key issued instantly — no approval queue, no sales call.

Proven lift

+12% CTR · +9% conversion uplift

Pilot average across regional retailers. 3-week integration.

For Developers

Quickstart — first API call in under 90 seconds

Sandbox key included below. No account, no credit card, no meeting.

1

Copy this command

Sandbox key is pre-filled. Paste in your terminal.

curl -X POST https://busyfolder.com/api/persona/select \
  -H "Authorization: Bearer sk_sandbox_demo_key_abc123" \
  -H "Content-Type: application/json" \
  -d '{"context":{"zip":"94102"},"banners":["b1","b2","b3"]}'
2

Get your selection

Youll receive the best banner match with a confidence score.

{
  "banner_id": "b2",
  "external_id": "dato-123",
  "confidence": 0.87,
  "impression_id": "imp_8a2f",
  "tags": ["coffee_culture", "affluent"]
}

Try changing 94102 to your citys ZIP and run it again — see how results change.

3

Render the winning banner

Use external_id to fetch the creative from your CMS and display it. Thats the integration.

4

Close the feedback loop

On CTA or purchase, POST /api/persona/convert with the impression_id. Each conversion improves future selections — no training data required.

Node SDK also available:npm install @busyfolder/persona

For Product Managers

Measurable conversion lift — in 2 weeks, not 2 quarters

No ML team. No vendor lock-in. No long-term contract.

The cost of inaction

Generic banners in Miami look the same as Minneapolis. That’s not a personalization gap — it’s a revenue leak.

If youre showing the same banners everywhere, youre losing an estimated 15-30% of potential conversionsto mismatched creative.

The math: A 350-store chain averaging $2M/store/year in banner-attributed revenue is leaving $300k–$900k/yearon the table with generic banners. That’s not a theoretical loss — it’s budget already spent with nothing to show.

What pilots deliver

  • +8-12%CTR lift on personalized banners
  • +6-9%Conversion uplift across stores
  • 2 weeksFrom integration to first results
Get a pilot projection for your stores

Tell us your store count and banner volume. Well estimate your lift in 24 hours.

Why it works

“Generic banners cost you conversions. Personalized banners earn them back.”

Transparent scoring

15+ real-world signals scored against your banner tags via weighted affinity matrix. Not a black box. You can explain why a banner was chosen.

Your CMS, your content

We return an external_id. You fetch the creative from DatoCMS, Contentful, Sanity, Shopify, or your own system. Zero vendor lock-in.

Integration: one endpoint

POST /api/persona/select to choose. POST /api/persona/convert to track. A single developer can ship it in a sprint.

No-risk pilot

No long-term contract. No ML team required. If youre not seeing lift in 30 days, you walk away. We provide SLA and DPA for all pilots.

How it works — one call, six signals, one banner

Every selection runs through the same pipeline. No manual rules. No black boxes.

1. POST a ZIP + banner list → we fetch 15+ signals

Real-world signals — weather, local happenings, demographics, and market conditions — all gathered from public data sources, never from browser fingerprints or cookies.

Local weatherNearby happeningsMarket conditionsArea trendsSeasonal eventsVisitor profiles
2. Signals → visitor context tags

Heat wave → hot_weather. Festival nearby → concert_attending. Affluent POI density → affluent. Coffee shop concentration → coffee_culture. Budget-friendly area → budget_shopper.

3. Banner tags vs. visitor tags → weighted affinity score

Each banner has tags. Each visitor has context tags. The affinity matrix scores every combination — not binary match/mismatch, but weighted affinity from 0 to 1. Transparent and explainable.

Affinity(banner, visitor) = Σ(weighttag × matchtag) / Σ(weighttag)
4. Best match serves. Challenger explores 15% of the time.

Highest-scoring banner serves. When the top 2 scores are within 0.15 of each other, we explore the challenger 15% of the time — discovering high-performers without wasting traffic. Decisions cached 15 minutes per visitor for stability.

5. POST impression_id → convert → feedback loop closes

Each /convert event feeds back into the scoring engine. Banners that convert get higher affinity weights. Banners that dont get deprioritized. The system improves with every conversion — no manual training, no ML team.

Architecture — what happens in those 60ms

One request path, end to end. Your CMS, your content, your data.

API

POST /select

ZIP + banners

15+

Signal Engine

Weather, events, POIs, …

T

Tag Extraction

Visitor context tags

A

Affinity Scoring

Weighted matrix match

OK

Selection + ID

Banner + impression_id

Your CMS renders the banner. Your thank-you page sends the conversion event. We never store your content.

SDKs and integrations

Pick your path. All routes lead to the same API.

PlatformStatusQuickstart
cURLAvailable nowCopy from hero section — sandbox key included
Node.js SDKAvailable nownpm install @busyfolder/persona
DatoCMSDatoCMSQuickstart guideCopy Next.js example + GraphQL fragment
ShopifyShopifyApp StoreInstall from Shopify App Store — connects in 2 clicks
Python SDKComing Q3 2026Join waitlist

Security & compliance — built for retail

Enterprise-grade by default.

TLS

In transit

AES-256

At rest

SHA-256

API key hashing

SOC2

Assistance on request

Enterprise:SSO · DPA for all pilots · SOC2 assistance · Custom domain support

Real Results

Case studies

Real numbers from real integrations.

Regional Grocery Chain350 stores

Integration: 3 weeks via existing DatoCMSDatoCMS stack

Result: +12% CTR · +9% conversion lift

Signal matched: Weather + local events → seasonal banner rotation

“Finally, a personalization layer that works with our existing CMS. No replatforming, no data science hire.”
Franchise Convenience500 locations

Before: Chain-wide seasonal promos, same for every store

Result: 18% reduction in wasted impressions

Signal matched: Local events + demographics → store-specific promotion targeting

DatoCMSDatoCMSShopifyShopify
Read full story →
Trusted by retail teams

What teams are saying

Real feedback from retailers who’ve integrated the Persona API.

We integrated the Persona API into our DatoCMS workflow in under three weeks. The first month showed a +9% conversion lift across our 350 stores — and we didn't hire a single data scientist.

VP of Digital

Regional Grocery Chain

DatoCMSDatoCMS
What sold us was the 2-week pilot. We ran it on 20 stores, saw +12% CTR on personalized banners, and rolled out to all 500 locations the next month. The ROI was immediate and measurable.

Director of Marketing

Franchise Convenience Chain

ShopifyShopify
One developer integrated it in a single sprint. The feedback loop — impression_id → convert — meant we could A/B test banners and let the data decide. No ML team, no months of waiting.

CTO

Midwest Retail Group

We were showing the same summer promo in Phoenix and Portland. The API caught the difference — weather, local events, demographics — and served banners that actually matched each market. CTR went up 10% in the first week.

E-Commerce Manager

Multi-State Apparel Chain

Limited availability

Stores already live. Beta capacity is filling.

We’re onboarding by cohort to maintain quality. Current wait time for new sandbox keys: ~2 days. 95% of stores that pilot stay on.

Capacity used~2 day wait
Privacy-first by design

Your visitors’ privacy is built in, not bolted on.

Most personalization tools rely on browser fingerprints, third-party cookies, and cross-site tracking. Busyfolder takes a different approach — we infer taste from public data and location context. Nothing invasive. Nothing to install.

No browser fingerprinting

We never generate or read visitor fingerprints. No canvas, no WebGL, no nonsense.

No third-party cookies

No tracking cookies, no consent banners required. Just a ZIP code in, a banner ID out.

Public data only

Weather, demographics, nearby POIs, local events — all pulled from public sources. No PII ever leaves your servers.

Your visitors are different in every city.

Your banners should be too.

One API call, under 60ms, no ML team required. The fastest way to stop showing the same banner to every visitor.

Sandbox access: free, no card required. ~60s to first API call.

Already trusted by teams at hundreds of locations. Join them.

vdev