← All projectsProject / Business workflow

CRM for media-buying teams

A media-buying CRM connecting offers, buyer assignments, review cycles, conversion events and monthly performance.

PythonFastAPIPostgreSQLSQLAlchemyAngularKeycloak
Project overview

What the service does

A CRM for a media-buying team. It tracks an offer by product and market, assigns a responsible buyer, opens a time-bounded review cycle and records conversion callbacks from the tracker. The team compares conversions with the cycle’s FTD limit and reviews monthly CPA/ROAS; some finance values are entered manually.

Media-buying decisions depend on product, geography, buyer responsibility and conversion history. When these are maintained separately, the team loses a shared view of review status and financial inputs.

Who uses it

Media buyers, team leads, analysts and managers who coordinate offer tests, assignments, reviews and monthly financial reporting.

Input
  • Offer, product, GEO/subtype and assigned buyer.
  • Tracker click/conversion callbacks and cycle FTD threshold.
  • Spend, currency and manually supplied finance values.
Output
  • Current test-cycle status and a review decision.
  • Conversion counts and monthly CPA/ROAS figures.
  • An audit trail of who changed an assignment or review state.
System requirements
  • Offers are grouped by product, market and subtype and assigned to a buyer.
  • Review cycles use a limit on first deposits.
  • Conversion events arrive from the tracker through postbacks.
  • Monthly CPA/ROAS combines event data with finance values entered by the team.
01 / How the service works

Offer → test cycle → conversion review → monthly metrics

Process mapSolid line: normal flow · dashed line: retry or return
Process map: mediacrmA process map showing the sequence of work, decisions and alternate routes.
INPUTOffer and marketProduct, GEO and subtype
STEPAssign a buyerRole and team permissions
DATAOpen test cycleOne active cycle for this offer segment
SERVICEReceive tracker eventsClicks and conversion status
DECISIONFTD limit reached?Compare conversions to cycle threshold
STEPExtend or continueA manager reviews the current cycle
RESULTPause or close cycleKeep the decision and actor in history
RESULTMonthly finance reviewSome values are entered manually
DATAChange historyAssignment and review snapshots
  1. INPUTOffer and market

    Product, GEO and subtype

    ContinueAssign a buyer
  2. STEPAssign a buyer

    Role and team permissions

    ContinueOpen test cycle
    record changesChange history
  3. DATAOpen test cycle

    One active cycle for this offer segment

    ContinueReceive tracker events
  4. SERVICEReceive tracker events

    Clicks and conversion status

    ContinueFTD limit reached?
    monthly summaryMonthly finance review
  5. DECISIONFTD limit reached?

    Compare conversions to cycle threshold

    not yetExtend or continue
    reachedPause or close cycle
  6. STEPExtend or continue

    A manager reviews the current cycle

  7. RESULTPause or close cycle

    Keep the decision and actor in history

  8. RESULTMonthly finance review

    Some values are entered manually

  9. DATAChange history

    Assignment and review snapshots

Arrows show the direction of work; labeled branches show decisions, errors and retries.
02 / System architecture

Main components and their roles

Product / GEO / subtype

Organize the offer

The team records the product and the market context for an offer.

How it works

The domain model separates products, geographic dimensions and subtypes so assignments and analytics share a consistent reference.

Roles / buyer assignment

Assign responsibility

An offer is associated with a buyer and governed by the user role.

How it works

The backend checks permissions before each operation. Audit snapshots record assignment and review changes.

PostgreSQL / partial index

Open a review cycle

A review cycle provides a defined period and conversion limit for evaluation.

How it works

A database index allows only one active cycle for an offer segment, including when two users start a cycle at the same time.

Tracker postback

Receive conversions

Tracker events connect clicks and conversion status to the relevant offer.

How it works

A click ID and conversion status identify each event and prevent duplicate records. Events for unknown or inactive offers are acknowledged without being added to the cycle.

FTD / review workflow

Evaluate the cycle

Conversion events and the configured first-deposit threshold inform the review workflow.

How it works

Cycle rules, event linking and audit history preserve the operational context behind a review decision.

Monthly CPA / ROAS

Review performance

The team compares monthly activity and financial metrics.

How it works

Monthly calculations combine conversion events with NGR, spend and deposit values entered by the team.

03 / Implementation details

Engineering decisions

01

Enforce business invariants in the database

Partial uniqueness for active cycles and click/status uniqueness protect important domain rules.

02

Make responsibility visible

Assignments, roles and audit snapshots connect each workflow change to its operational context.

03

Keep financial inputs explicit

Event-derived indicators and manual financial inputs remain distinguishable.

Software development for business

Have a project in mind?

Tell me what the application should do, how the team works today and which requirements or deadlines matter.