Agentic customer segmentation and next-best-offer on a live graph

Turn customer holdings, spend behavior, category affinity, channel preferences, and campaign touches into a live graph that marketing agents can query and segment in real time.

Why marketing data breaks in SQL for AI agents

A marketing analyst rarely asks a single-table question. They ask: “Which customers hold an entry-tier card, increased grocery spend in the last 30 days, are eligible for our grocery accelerator offer, haven't been contacted too recently, and are opted in on push or email?” Answering that in raw SQL requires joining holdings, transactions, MCC rollups, eligibility, consent, and touch logs. In JetGraph, those are direct graph relationships.

Subject-area graph model

  • Customer & holdings: Customer -[:HOLDS]-> Card -[:OF_PRODUCT]-> CreditCardProduct, plus Customer -[:LIVES_IN]-> Location and Customer -[:IN_SEGMENT]-> CustomerSegment.
  • Spend & categories: Card -[:SPENT_AT]-> Merchant -[:IN_MCC]-> MccCategory (with compact tx_count, approx_sum, and hourly/daily histograms) and Merchant -[:BASED_IN]-> Location for away-from-home travel detection.
  • Campaigns & consent: Campaign -[:RUNS]-> MarketingOffer, Customer -[:ELIGIBLE_FOR]-> MarketingOffer, Customer -[:CONTACTED]-> MarketingOffer, Customer -[:ACCEPTED]-> MarketingOffer, and Customer -[:PREFERS_CHANNEL]-> Channel.

What AI agents do over MCP

  • Discover audience semantics: get_schema returns every node and edge type's business_meaning (for instance, remembering to verify channel opt-in properties before recommending outreach).
  • Find lookalikes in one call: find_similar takes weighted edges such as SPENT_AT and OF_PRODUCT to surface customers with matching spend and product overlap without writing SIMILAR_TO edges.
  • Spot contact fatigue & whitespace: compare ELIGIBLE_FOR edges against CONTACTED tx_count and get_histogram windows to find untouched eligible cohorts or over-contacted customers.
  • Spot spend shifts & dormancy: compare short vs baseline get_histogram windows or use get_last_neighbor recency to detect cooling customers before churn.
  • Turn insights into live segments: agents call create_signal and create_segment so segment-evaluator keeps audience membership up to date as new spend events stream in.

Predictable RAM for millions of customers

Because every Card -[:SPENT_AT]-> Merchant or Customer -[:CONTACTED]-> MarketingOffer relationship is stored as one compact record updated in place rather than an unbounded row-per-touch log, portfolio memory scales with active relationships instead of total campaign volume.