Performance marketing / Built and operated

We build performance marketing around your business.

We build the systems behind better advertising decisions. We connect your product, sales and marketing data — then turn it into bidding groups, useful signals and a catalog ready for each channel.

See how it works
Better decisions, from the product to the campaign.Your economics. Made operational.

Projects we’ve built

See the problem.
Follow the solution.

Start with bidding: how we turn a mixed catalog into groups that deserve different decisions. Then follow an order, a feed or a product through the other systems we build.

Bidding algorithms

One catalog. Different reasons to bid.

A single return target groups very different products together. We connect the signals, separate the products and give each group a bidding strategy that fits.

Bidding / What the average hidesScripted example · Fictional data

This is where the catalog starts.

A product feed goes to Google or Meta. Here, we follow one Google Ads campaign.

We turn product economics into different bidding decisions: room to grow for the products that can support it, tighter targets or less exposure for the rest.

Read the full example
  1. A catalog enters the ad platform.

    Product feeds connect catalogs to Google and Meta. This fictional example follows 10,000 products in one Google Ads campaign with a 4× revenue return-on-ad-spend target. The target applies to the combined result; the platform still adjusts bids for individual auctions.

  2. A good average can hide very different returns.

    Zoom in on two illustrative products. Both sit under the shared 4× campaign target, but Product A returns 6× and Product B returns 2×. With equal ad spend, their combined ROAS is (6 + 2) ÷ 2 = 4×. The target is met even though performance differs. In a real catalog, combined ROAS is total revenue divided by total ad spend — it is spend-weighted, not a simple average of product ratios.

  3. Layer the commercial evidence.

    Platform ROAS is the first row, not the whole decision. We add the percentage of sizes available, sales velocity, on-site conversion and gross margin. In this fictional comparison, A has its full size range, rising sales, stronger conversion and high margin. B has a limited size range, falling sales, weaker conversion and thin margin.

  4. Process the signals as one product picture.

    The algorithm combines these inputs with the business’s agreed definitions and rules. A strong platform return can still hide poor contribution. A product with healthy margin and demand may have room to acquire more customers. We use enough evidence to support the decision and leave uncertain products in a test or review group.

  5. Assign understandable commercial groups.

    The illustrative groups use the team’s own definitions: Stars have high sales and high margin; Cash cows sell in volume with thinner margin; Phase out captures products whose sales leave negative contribution. Grow, Test and Maintain are other possible groups. These are adapted commercial categories, with a reason attached to each assignment. No private margin thresholds are shown.

  6. Match the target to the economics.

    In the fictional Google plan, Stars receive a 3× revenue target, giving higher-margin products more room to acquire customers. Cash cows receive a 6× target, asking thinner-margin products to earn more revenue per unit spent. Phase out products are held from paid exposure under approved rules. Targets are settings, not promised results. We measure contribution across the catalog and review the groups as evidence changes; people approve the targets and exclusions.

  7. Return the groups to Google and Meta.

    We write group labels back to the product feed. They can organize Google campaign groups and Meta product sets, with separate targets, budgets or actions appropriate to the platform and campaign setup. The platform continues to place auction-time bids; our system changes the product groupings and commercial instructions it works with.

Bidding algorithms

One catalog. Different reasons to bid.

A single return target groups very different products together. We connect the signals, separate the products and give each group a bidding strategy that fits.

Scripted example · Fictional dataScripted example · Fictional data
Bidding / What the average hides
What the average hides6× + 2×, with equal spend → 4× combined ROAS
What we bring togetherROAS + sizes + sales velocity + conversion + margin
What goes back to the platformsStars → room to grow · Cash cows → tighter target · Phase out → hold back

We turn product economics into different bidding decisions: room to grow for the products that can support it, tighter targets or less exposure for the rest.

Read the full example
  1. A catalog enters the ad platform.

    Product feeds connect catalogs to Google and Meta. This fictional example follows 10,000 products in one Google Ads campaign with a 4× revenue return-on-ad-spend target. The target applies to the combined result; the platform still adjusts bids for individual auctions.

  2. A good average can hide very different returns.

    Zoom in on two illustrative products. Both sit under the shared 4× campaign target, but Product A returns 6× and Product B returns 2×. With equal ad spend, their combined ROAS is (6 + 2) ÷ 2 = 4×. The target is met even though performance differs. In a real catalog, combined ROAS is total revenue divided by total ad spend — it is spend-weighted, not a simple average of product ratios.

  3. Layer the commercial evidence.

    Platform ROAS is the first row, not the whole decision. We add the percentage of sizes available, sales velocity, on-site conversion and gross margin. In this fictional comparison, A has its full size range, rising sales, stronger conversion and high margin. B has a limited size range, falling sales, weaker conversion and thin margin.

  4. Process the signals as one product picture.

    The algorithm combines these inputs with the business’s agreed definitions and rules. A strong platform return can still hide poor contribution. A product with healthy margin and demand may have room to acquire more customers. We use enough evidence to support the decision and leave uncertain products in a test or review group.

  5. Assign understandable commercial groups.

    The illustrative groups use the team’s own definitions: Stars have high sales and high margin; Cash cows sell in volume with thinner margin; Phase out captures products whose sales leave negative contribution. Grow, Test and Maintain are other possible groups. These are adapted commercial categories, with a reason attached to each assignment. No private margin thresholds are shown.

  6. Match the target to the economics.

    In the fictional Google plan, Stars receive a 3× revenue target, giving higher-margin products more room to acquire customers. Cash cows receive a 6× target, asking thinner-margin products to earn more revenue per unit spent. Phase out products are held from paid exposure under approved rules. Targets are settings, not promised results. We measure contribution across the catalog and review the groups as evidence changes; people approve the targets and exclusions.

  7. Return the groups to Google and Meta.

    We write group labels back to the product feed. They can organize Google campaign groups and Meta product sets, with separate targets, budgets or actions appropriate to the platform and campaign setup. The platform continues to place auction-time bids; our system changes the product groupings and commercial instructions it works with.

What we put into the decision

We combine ad results, on-site behavior, stock, costs and returns. The algorithm finds products to scale, products to test and products to hold back, then writes those decisions into feed labels and campaign groups. Your team can see why each product moved.

The starting point

One target across the whole catalog

What your team gets

Different targets for different product groups

Built and operated / 014

old “top performers” were losing money per sale

A Nordic multi-brand e-commerce group

Compare the answers before you switch.

The situation

At a Nordic multi-brand e-commerce group, bidding segments rewarded revenue and ROAS. They did not say what was left after channel cost.

What we built

We rebuilt the daily segmentation on contribution and ran the old and new answers side by side, combining catalog economics, paid results, price position and funnel behavior.

What changed

Four products called top performers by the old system were losing money on every sale. The comparison exposed where budget had been going, before anything switched. That comparison is a deliverable we insist on.

What it takes

Start with the data and the people.

Product-level paid performance matched to costs, stock, expected returns and feed labels. We need enough history to distinguish evidence from noise, and an explicit way to explore products with little data.

What stays human

The judgment stays with people.

Your team decides how much room each group has to spend, which products deserve a test and when to stop advertising. We show the reason for every move. A seasonal launch or a planned clearance can override the default — visibly, with an owner.

Profit bidding

Send what the sale contributes, not just what it sold for.

Standard measurement sends the purchase value. We connect the order to its costs, calculate product contribution on your server, and send that value to the ad platform.

Profit bidding / What a €120 sale leaves behind
The saleA backpack sells for €120.
Subtract the costs€60 product + €8 packing + €12 delivery + €4 payment + €6 returns
The bidding value€30 product contribution → ad platforms, in real time

We calculate contribution as each sale happens, so you can optimize towards profit and make every advertising euro work harder.

Read the full example
  1. Standard measurement passes on revenue.

    A backpack sells for €120. Standard revenue-based measurement sends the sale value and product information to the ad platform. Bidding sees a €120 purchase.

  2. The purchase reaches our calculation.

    We receive the same order on your server, including the product, sale price and selected shipping method. We connect those details to your product records and fulfilment rules.

  3. Add the order context.

    The order identifies the backpack, its €120 sale price and the selected home-delivery service. A new-or-returning customer flag adds context for your acquisition strategy.

  4. Subtract each cost as it is matched.

    Start with €120. Subtract €60 for the product: €60 remains. Picking and packing costs €8, leaving €52. Home delivery costs €12, leaving €40. Payment processing costs €4, leaving €36. The expected return cost is €6, leaving €30.

  5. The remaining value is product contribution.

    The five costs total €90. The €120 sale therefore contributes €30 towards advertising and the rest of the business. This is the product contribution we send for bidding.

  6. Send the contribution to the ad platform.

    The calculation closes back into the purchase journey. The server sends the €30 contribution value to Google or Meta as the sale happens. Your team can reconcile the same calculation in commercial reporting.

  7. Optimize for profit in real time.

    Bidding can now work towards what the sale contributes, instead of its revenue alone. We turn each purchase into a live profit signal so you can direct spend towards stronger economics and make every advertising euro work harder.

What we put into the decision

We match product IDs to backend costs, use dimensions and handling rules for picking and packing, apply the selected shipping rate, and account for payment fees and expected returns. A new-or-returning customer flag adds acquisition context. The agreed contribution value reaches the platform; detailed costs stay in your systems, and reporting uses the same calculation.

The starting point

Revenue sent with the purchase

What your team gets

Product contribution sent as the bidding value

Built and operated / 02Same revenue.

different orders, different contribution

A Nordic multi-brand e-commerce group

The optimization target stopped being a proxy.

The situation

At a Nordic multi-brand e-commerce group, the platforms received order revenue. A bulky order sent in several parcels looked like a small order with few returns if the totals matched.

What we built

We built a server-side purchase calculation that records the order and each line before the confirmation page finishes rendering. The cost model includes fulfilment and expected returns, alongside the product’s own cost.

What changed

Order and product-level contribution became available at purchase for reporting and bidding. The platform could receive a value grounded in fulfilment costs, rather than treating equally priced orders as equally valuable.

What it takes

Start with the data and the people.

Reliable order lines, product costs, carrier rates, returns history and a consent-aware collection plan. We reconcile the signal against the commercial accounts before putting it into bidding.

What stays human

The judgment stays with people.

Finance and operations agree the cost model with us: what handling includes, how shipping is charged and how returns are estimated. Your team approves which value is sent and how it is used. We version those decisions so a changing signal can be explained.

Feeds

Your catalog. The right version for every channel.

We give you control over which products reach each channel, and what information goes with them. A thin size range is one reason to send a product somewhere else.

Scripted example · Fictional dataScripted example · Fictional data
Feeds / Your catalog. Your channel rules.
Start with the detailIn stock · only 1 of 10 sizes available
Apply your ruleHold from paid feeds → include in email
Adapt the recordChannel-specific titles, descriptions and fields

We give you control over which products reach each channel, and the information they arrive with.

Read the full example
  1. One catalog goes everywhere.

    An ordinary product feed can send the same in-stock catalog to advertising and email platforms. That stock flag alone says little about whether the remaining variants suit the channel.

  2. Read the availability behind the flag.

    Our example trail shoe is in stock, but only size 41 remains out of ten sizes. Its size coverage is 10%. Many shoppers clicking an ad would not be able to buy their fit.

  3. Apply the business’s own rule.

    We connect variant availability to custom feed rules. For this example, the team chooses to hold this limited size range from paid feeds and include it in the email feed. The rule can use other product properties and channel requirements too.

  4. Send the product where it belongs.

    The shoe is held from Google and Meta advertising feeds, while the email feed receives it for customers interested in the available size. This is a rule the team chose for the example, not a claim that every product with one size left should be excluded.

  5. Adapt what each destination receives.

    The email version turns the plain title “Trail shoe” into “Trail shoes for your next escape” and replaces a blunt description with “Leave the everyday behind. Find your next favorite trail and make more of every weekend outdoors.” Availability stays in its own field. We adapt titles, descriptions and other properties to the channel, using approved product facts and brand voice. The example shows the delivered product record, not a sent email.

  6. Keep control of the catalog.

    Your team decides what goes where, approves the field mappings and handles commercial exceptions. We turn those choices into repeatable, checked outputs so every channel receives the products and information intended for it.

What we put into the decision

We apply your rules to availability, size coverage and other product properties. A product can stay out of paid feeds and go into email instead. We also adapt titles, descriptions and fields to each platform, then check the output before delivery.

The starting point

One catalog, sent everywhere

What your team gets

Your products and information, tailored to each channel

Built and operated / 03−20%

products on the highest-commission channel

A Nordic multi-brand e-commerce group

Each channel gets the catalog it can pay for.

The situation

At a Nordic multi-brand e-commerce group, one catalog went to five channels under much the same rules, despite different commissions.

What we built

We built a rule set for each channel. The highest-commission output went from 24,565 products to 19,582, about 20% fewer. Two comparison-channel outputs went from 20,412 to 17,512, a 14.2% reduction.

What changed

Products that could not cover a channel’s economics stopped buying exposure there. A separate incident — one availability string taking 19,607 products to zero without an error — established why every output must assert its own count.

What it takes

Start with the data and the people.

Dependable product and variant data, the channels you use and the rules your team wants to apply. We agree the inclusion rules and field mappings, then test each output.

What stays human

The judgment stays with people.

Your team decides which products belong in each channel and how they should be described. One remaining size may still have demand. We show what each rule changes and leave room for a deliberate exception; your team keeps the commercial judgment.

Product performance dashboard

The whole product picture. In one place.

A marketing or store manager should not need four departments to answer one product question. We bring visits, spend, conversion, returns, stock and contribution into a shared overview.

Scripted example · Fictional dataScripted example · Fictional data
Product performance / One view across the business
The problemFour departments. Separate reports.
One product viewVisits → conversion → returns, spend, stock and contribution
Built to useFilter by brand, category or product · ready for AI tools

We put the key product decisions in one place, so your team can act without asking four departments to assemble the answer.

Read the full example
  1. A simple question crosses four departments.

    A store or marketing manager wants to understand a product before changing spend or stock. Marketing has visits and advertising spend; the store has orders and conversion; operations has stock and returns; finance has costs. Assembling the answer means asking people for separate reports.

  2. Connect the evidence once.

    We bring the departmental records into a shared model, match products and periods, and agree the calculations with the business. Costs, returns and advertising use consistent definitions, so the numbers describe the same product journey.

  3. Unfold the model into a useful overview.

    The connected model becomes a dashboard showing the journey from site visits to orders and returns, alongside marketing spend, available stock and contribution. The business P&L and EBITDA view can use the same agreed definitions; product contribution is not treated as company EBITDA.

  4. Find the decision’s level of detail.

    Brand, category and product filters let the team move from the catalog to the item they are discussing. The example selects Footwear and a trail shoe, with all brands included and one matched 30-day period.

  5. See the numbers together.

    In the fictional product view, 12,000 visits produce 360 orders: a 3% conversion rate. Eighteen orders return: 5%. Advertising spend is up 8% against the previous period, 84 units are available, and contribution after advertising and returns is positive. The point is that all of this is visible together, not that any one metric proves the next action.

  6. Use the same foundation for people and AI tools.

    The dashboard is built on defined, accessible product data that can also be connected to AI tools. This is readiness for a connection, not a claim that a live AI system is already answering inside this example. People agree the definitions, access and decisions. The team gets one place to understand the product without rebuilding the report.

What we put into the decision

We connect the departmental records, match products and periods, and agree the calculations. Your team can filter by brand, category or product, follow the journey from visit to contribution, and use the same definitions in the business P&L. The structured data is ready to connect to AI tools as well as the dashboard.

The starting point

Separate reports and questions across departments

What your team gets

One product view, ready for decisions and AI tools

Built and operated / 04+9.5%

listing click-through, net of two control markets

A Nordic multi-brand e-commerce group

We also report what did not move.

The situation

At a Nordic multi-brand e-commerce group, on-site ranking did not reflect demand. We needed to see the effect through the whole funnel.

What we built

We built daily product popularity scores per market and launched in one market while keeping two independent markets as controls. The shared product view let us follow the result beyond the listing click.

What changed

Listing click-through rose 9.5% net of the controls, with p≈0.006. The effect weakened at each step, attenuated to nothing by the cart, and did not move revenue. A ranking change can change what people click without changing what they buy.

What it takes

Start with the data and the people.

Consistent product identifiers across the source systems, agreed metric definitions and reporting periods. We establish how costs are attributed, which views each team needs and how the shared data can be accessed.

What stays human

The judgment stays with people.

People agree what each metric means and choose the action. A positive contribution, rising spend or low stock is evidence to discuss, not an instruction by itself. We make that evidence available in one place, so your team can use its judgment without first rebuilding the report.

Creative at catalog scale

Every product gets its own ad.

We turn the product feed into finished, on-brand creative at catalog scale — and only redraw what changed.

Scripted example · Fictional dataScripted example · Fictional data
Only redraw what changed.
Catalog22,000 ads
Illustrative nightly change317 redraw
The restAlready there

Every product gets its own ad. The nightly run touches only what moved; people review what needs judgment.

Read the full example
  1. Keep the contact shadow.

    Two schematic cutouts are compared. A simple fill keeps the soft contact shadow; a model removes it and makes the product look pasted. The simple method wins on the image, not on complexity.

  2. Compose the whole ad.

    The product is composed on a brand ground with a relative offer index, original index struck through, rating, offer badge, brand position and disclaimer. These are fictional layout examples, not product claims.

  3. Only redraw what changed.

    The ad gets a fingerprint from the price, offer, rating, photograph and template. In the illustrative nightly run, 22,000 inputs are checked and 317 have changed. Only those 317 redraw. People own the template and review uncertain photographs before publication.

What we put into the decision

The renderer composes the product, offer, rating, brand and required disclaimer. Each result is fingerprinted from its own inputs. For photography on white, a simple fill often keeps the contact shadow better than a model; we choose by the result, not the complexity.

The starting point

Raw product photography

What your team gets

A finished ad for every product

Built and operated / 0522,000

products, each with its own on-brand ad

A Nordic multi-brand e-commerce group

The whole catalog became advertisable.

The situation

At a Nordic multi-brand e-commerce group, catalog advertising served raw photographs. A design queue could only cover the products someone had already picked.

What we built

We built a renderer that creates an ad for every product, writes it back to the catalog and fingerprints the inputs. The nightly run redraws only changed products.

What changed

All 22,000 products received their own on-brand ad. The operating work moved from a design queue to a repeatable run, with uncertain images surfaced for review.

What it takes

Start with the data and the people.

Dependable product photographs and feed fields, a reviewed template, approved offer language and required disclaimers. We test the template against the awkward cases in the catalog.

What stays human

The judgment stays with people.

People own the template and the review. If the photograph disagrees with the feed, or the cutout cannot resolve the background, we flag it. An uncertain image does not become a published ad simply because a run finished.

AI asset generation

A production line with a final human yes.

We build generated image and video assets around measured retention, a pinned product and checks that cover the whole clip.

Scripted example · Fictional dataScripted example · Fictional data
Nobody’s taste. Nobody’s guess.
ProductionRetention → pinned product → full checks
Hook comparison1 clip + 6 hooks = 6 posts
ReleaseA person still says yes

Assets we can stand behind: an angle from retention, the real product, checks across the whole clip, and a final human yes.

Read the full example
  1. The angle comes from what people watched.

    Four readings are rejected: clicks that count plays, add-to-cart counted six ways, a view-optimised hook rate, and a second advertiser in the account. A retention curve remains, and the chosen angle follows what people kept watching.

  2. Pin the product before generation.

    A schematic product stands for the real approved cutout. It is composed onto the brand ground and labeled frame 1. A brief counterexample morphs without the pin; the pinned geometry holds. In production we use the real reference.

  3. Generate what the shot needs.

    The shot routes to a performance clip, a silent loop or a static card. Relative effort bars carry no cost claim. A loop plays forward and back; the illustrative seam measure falls from 33.6 to 0.6 RMS, below the 12/255 craft reference.

  4. Check the entire clip.

    The whole-duration frame grid is checked. Three frames flag an unintended mark, a stray hand and a numeral. Audio, a watermark-free master and captions get a second check. A script-free transcription catches a dropped word; a scripted pass would repair it and hide the failure. The content must be corrected and rechecked before approval.

  5. One clip. Six hooks. Six posts.

    One approved clip fans out into six posts with different opening hooks and no further generation. In the supplied work, hook changes moved performance 50–200%, versus 20–30% for body changes; these are observed ranges, not promised uplift. The script, claims and final publishing decision remain human.

What we put into the decision

We reject misleading headline metrics, select the angle from retention and compose the real product into the first frame. We then check the full frame grid, seam, audio, master and two transcription passes. Opening hooks are added last, so one approved clip can support a real comparison without generating it again.

The starting point

Taste and headline platform metrics

What your team gets

Measured retention and approved claims

Built and operated / 06226 → 13 → 8 → 0

sessions → add-to-carts → checkout → orders

A direct-to-consumer brand

The ad was not the whole problem.

The situation

A direct-to-consumer brand’s four-day paid flight produced 226 sessions, 13 add-to-carts and 8 visits to checkout — but no email addresses entered and no orders.

What we built

We paired generated creative with dedicated landing pages measured against purchases per hundred visits. We brought the true total and delivery window above the fold. The funnel also exposed a late delivery charge, an undisclosed three-week wait and a returns policy that excluded the category, behind a broken policy page.

What changed

The biggest changes required commercial decisions about the offer. The page could only partly compensate. We reported that honestly; no post-change sales uplift is claimed. We would rather lose a visitor on the page than at checkout.

What it takes

Start with the data and the people.

Real product references, approved claims, existing performance worth reading and a person who can accept the finished asset. The landing page and offer must be ready to carry the same promise as the ad.

What stays human

The judgment stays with people.

People keep the script, the claim and the final yes. We do not generate a product claim that has not been approved, and nothing ships on a gate alone. Passing the checks earns an asset a review, not permission to publish.

A candid fit decision

Real economics.
Reachable evidence.

We should talk

A recurring decision.
A named owner.

  • A catalog or commercial operation with decisions that repeat.
  • Costs, returns and performance records we can reconcile.
  • A team willing to compare the new answer with the old one.
  • A person who can approve rules and resolve exceptions.
We will say so if it is not a fit

Some work needs
a different start.

  • The offer fails before the marketing has a chance.
  • The required data cannot be reached or trusted.
  • Nobody owns the definitions or the commercial decisions.
  • The expectation is guaranteed uplift or decisions without review.

Book a call / 45 minutes

Bring the decision
that needs
better evidence.

We will work through the current answer, the data behind it and what would make a different answer worth acting on.

  1. 01Show us the decision as it happens today.
  2. 02Look at the economics, evidence and owner.
  3. 03Leave with a candid fit decision and next step.

Europe-friendly · Remote-first · No pitch theatre

Let’s look at the work.Consultation

Business Growth Architects s.r.o., as controller, uses these details to respond to your enquiry and arrange a consultation. Required fields are needed to handle your request. Please avoid sensitive personal information. Read our privacy notice for the legal basis, retention and your rights.

This form is protected by reCAPTCHA; the Google Privacy Policy and Terms of Service apply.

We’ll reply to arrange a time. This is a request, not a confirmed booking.

Performance marketing — bidding, contribution and product data — BGA