Magento 2 Affiliate Program Extension

View Demo

Run your own affiliate program in Magento 2, without paying an affiliate network a cut of every commission. Affiliates promote your store with referral links, product links, banners, widgets and coupons, and earn per sale, click, lead or banner impression.

You set the rates by program, affiliate group and first or repeat order, see how each commission was calculated, and pay affiliates through PayPal, Skrill, your own method or store credit.

  • 4 commission models: sale, click, lead, impression
  • Referral links, banners, widgets and coupons
  • Coupons credit orders without cookies
  • Automatic move to higher-commission groups
  • Commission breakdown for every order
  • Scheduled payout requests
Marketplace Approved
Hyvä
Magento Cloud
WCAG
Mage-OS
Compatible with:
Community:
2.3.* - 2.4.9
Enterprise:
2.3.* - 2.4.9
Problem

Affiliate networks and SaaS affiliate platforms charge you a fee or a cut on top of every commission you pay. Your affiliates, rates and payouts live in their system, and you run the program outside the store where your customers buy.

Solution

Mirasvit Affiliate runs the program inside Magento 2. Customers become affiliates from their account, share links, banners, widgets and coupons, and earn per sale, click, lead or impression. You pay them through PayPal, Skrill, your own method or store credit.

What you get with Magento 2 Affiliate

  • Pay per sale, click, lead or 1,000 banner impressions
  • As many programs as you need, each with its own dates, store views and customer groups
  • A different rate for a customer's first order and repeat orders
  • Affiliates move to a higher-commission group automatically as their sales grow
  • Affiliate coupons credit the order even when the shopper declined cookies
  • Commission only for the products and categories you choose
  • A breakdown of how every commission was calculated
  • Holding period and automatic deduction on refunds
  • Scheduled payout requests, paid through PayPal, Skrill, your own method or store credit
  • Hyvä and Breeze themes, REST API, 15 languages

Affiliate Programs

A program defines what an affiliate earns and for what. Run one program for everyone or several at once: each program has a priority, can stop the programs below it from applying to the same order, and can be limited by dates, store views (the language or regional versions of your store), customer groups and the affiliate's own results.

Pay per Sale

An affiliate earns a commission on each referred order: a percentage of the order total (shipping included, tax optional), a percentage of the subtotal or a fixed amount. Set one rate for the customer's first order and another for repeat orders.

You can pay commission only for selected products or categories, for example only for high-margin products.

Pay per Click

An affiliate earns a commission for each unique visitor who clicks their link, banner or widget. Repeat clicks from the same visitor are not paid, so clicking your own link does not add up.

Pay per Lead

An affiliate earns a commission when a referred visitor creates an account or subscribes to your newsletter.

Pay per Impression

An affiliate earns a commission per 1,000 unique views of your image banners on their site.

Hidden Programs

Create hidden programs and assign them to particular affiliates, such as a special rate for a partner blog. Affiliates without assigned programs join all visible programs automatically.

Affiliate Groups

Put affiliates into groups and give each group its own rates in a program. A group can update itself: affiliates move into it once their referred customers reach the number of orders, sales amount or items you set for the current week, month, quarter or year. The groups are recalculated every night.

Promotional Materials

Referral Link

Each affiliate gets a link to your store with a unique code. Affiliates see what they have earned through it in every program they take part in. You can rename the link parameter.

Product Links and Sharing Buttons

Affiliates can share a referral link to any product. Turn on the AddToAny social sharing buttons, and affiliates see them on product pages with the hint "Promote this product with your affiliate link" and in their profile.

Referral Banner

Create image or text banners in the admin, each pointing to its own landing page. Affiliates place them on their sites, and you see the clicks and impressions of every banner.

Referral Widget

Unlike banners, widgets are set up by affiliates themselves: they choose the size, title and number of products, and show your bestsellers, new arrivals or products that match a search term.

Referral Coupon

Each affiliate can get a unique coupon. Coupons are built on Magento cart price rules, so each program can give its own discount. Codes follow a pattern you set, and you can change any affiliate's code in the admin, for example to a branded one. See how to customize coupon codes.

Sign-up Button and Program List

Add the affiliate sign-up button and the list of your programs to any CMS or category page with widgets. Program descriptions support rich text.

How Referrals Are Tracked

When a visitor comes through an affiliate's link, the extension stores the affiliate in a cookie and links the customer to that affiliate for the commission lifetime, 365 days by default. Guest orders from the same browser are credited while the cookie lasts. Once the customer registers, the link no longer depends on the device, and their earlier guest orders are attached to the new account.

Coupons Work Without Cookies

If the shopper declined cookies or never clicked a link, an order placed with the affiliate's coupon is still credited to that affiliate.

Two Affiliates, One Customer

Choose who gets the commission when a customer is referred by more than one affiliate: the first or the last one.

Commission Limit per Customer

Limit how many commissions an affiliate can earn from one referred customer, for example only the first order.

No Self-referrals

Affiliates do not earn commission on their own orders, even with their own link or coupon.

How Commissions Are Calculated

Earned on the Order Status You Choose

A commission is added when the order reaches the status you choose, Complete by default. It is deducted when the order reaches the cancelling status you set or when you create a credit memo (refund).

Holding Period

Set a holding period to check a commission before it reaches the affiliate's balance, for example until the return window is over.

Commission Breakdown

Open any transaction in the admin to see how the commission was calculated: which program applied, the items, discounts and tax it was based on. If a referred order earned nothing, the latest activity on the dashboard shows why, such as a reached commission limit.

Tax in the Commission Base

Decide whether the commission is calculated with or without tax.

Affiliate Payouts

Affiliates request a payout from their account once their balance reaches your minimum, and you approve it. A request can never exceed the available balance.

Payout Methods

Affiliates choose a method and enter their payment details. PayPal, Skrill and Other are available by default, and you can add your own methods. You send the money and mark the payout as completed.

With the Store Credit & Refund extension, you can pay a payout to the affiliate's store credit balance in one click.

Scheduled Payout Requests

Turn on automatic requests, and on the first day of each week or month the extension creates and approves a payout request for every affiliate above the minimum. The amount can be rounded down to tens or hundreds.

Clear Workflow

Each payout moves through these statuses:

  • Pending
  • Accepted or Denied
  • Completed

Payout History

See every payout in the admin and add one manually, for example for a bonus paid outside the program.

Transactions and Reports

For Affiliates

The affiliate account shows the balance, every transaction and a statistics page with a chart for the period the affiliate selects.

Transactions and Referred Customers

In the admin, see every transaction and every referred customer, and export both to CSV or Excel XML. You can link customers to an affiliate manually or unlink them.

Dashboard

The admin dashboard shows:

  • Active affiliates, visits, revenue and commissions in the past seven days
  • Total affiliates and total payouts
  • Top 10 affiliates by commission earned
  • Latest activity

Affiliate results can be exported to CSV from the dashboard.

Banner Reports

Next to each banner, see how many clicks and impressions it brought, so you know which creatives to keep.

Detailed Feature List

General Settings

  • Automatic affiliate sign-up for new customers
  • Optional admin approval of new affiliates
  • Custom referral link parameter
  • Discounts and commissions through cart price rule coupons
  • Custom coupon code patterns
  • Custom fields in the affiliate sign-up form: text, text area, dropdown, multiselect, file and image

Email Notifications

  • New account
  • Account approved
  • New transaction
  • Balance update
  • New account and new payout request for admins, with CC

Compatibility

  • Hyvä and Breeze themes
  • REST API for accounts, programs, groups, coupons, banners, transactions and payouts
  • Multi-store: notifications in the language of the store view
  • Translations into 15 languages

See the user guide for every setting.

Run your affiliate program in your own store, without network fees
No hidden fees
Our developers install the extension on your store and configure it for your setup, free of charge.
Lifetime access to source code
Access to free support and updates for 1 year
Updates and support prolongation - $90

Pay today $149 for the first year.

Then $90 for updates and support services per year.

Cancel anytime.

30 days money back guarantee
See it in action!
Pick a quick tutorial to learn about various aspects of this extension
Customer Reviews 35
Earn points for your review about this extension modules. $1 = 10 points
Write Your Own Review

check-circle You submitted your review for moderation.

Alex Verified Buyer
From Bowie, United States
Using the module for over 1 month
Working perfect
This module is working perfect on our store.
Also installed:
Full Page Cache Warmer,  Google Tag Manager,  Google PageSpeed Optimizer,  Improved Sorting
Marcel Verified Buyer
From Bucharest, Romania
Using the module for 2 months
Most complete extension for affiliate
Easy to install and configure. It offers everything you need without requiring an active product or support subscription—unlike many other extensions.
Also installed:
Reward Points,  Follow Up Email,  Customer Segmentation Suite
Josh Verified Buyer
From Durban, South Africa
Using the module for over 2 years
Best Extension
This module works as expected
Also installed:
Advanced Reports,  Advanced Product Feeds,  Full Page Cache Warmer,  Layered Navigation,  Promo Banners,  Knowledge Base,  Customer Segmentation Suite and 10 more
Victor Verified Buyer
From Shenyang, China
Using the module for over 2 years
Useful extension
Easy to install and see the results quickly!
Also installed:
Advanced Reports,  Reward Points
peter Verified Buyer
From Mississauga, Canada
Using the module for over 3 years
Affiliate for Magento 2
Extension fulfills all requirements. Great analytics and updates for our affiliates. Would suggest Mirasvit extensions.
Also installed:
Google Tag Manager,  Improved Sorting,  Advanced Reports,  Elastic Search Ultimate
Manual & Support
Need more help?

Save time by starting your support request online and we'll connect you to an expert.

Frequently asked questions
chevron-down chevron-right

Does a referred purchase count if the customer checks out as a guest?

Yes. When a visitor comes through an affiliate's link, the extension stores the affiliate in a cookie, and guest orders from the same browser are credited to that affiliate for the commission lifetime, 365 days by default. You can change it with the Commission lifetime (days) setting.

A guest who orders from another device or browser is not recognized, unless they use the affiliate's coupon. Once the customer registers, they stay linked to the affiliate on any device, and their earlier guest orders are attached to the new account.

chevron-down chevron-right

Does a coupon order count if the shopper declined cookies?

Yes. If the customer is not linked to an affiliate yet, an order placed with an affiliate's coupon is credited to that affiliate, even without a cookie or a click on the referral link. The customer is then linked to the affiliate for future orders.

chevron-down chevron-right

Can I remove a customer from an affiliate?

Yes. In the Referred Customers grid you can unlink a customer from their affiliate, and after that no other affiliate can claim them. You can also link customers to an affiliate manually from the affiliate account.

The link lasts for the commission lifetime, 365 days by default, and you can limit how many commissions an affiliate earns from one referred customer.

chevron-down chevron-right

Can affiliates earn a commission on their own purchases?

No. Affiliates do not earn commission on their own orders, even with their own link or coupon, so the program pays only for customers they actually bring.

chevron-down chevron-right

Where do customers sign up as affiliates?

In their customer account: the affiliate link is in the account menu. You can also add a sign-up button to any CMS or category page with a widget. Sign-up can be automatic for every new customer or require your approval.

Each affiliate gets a unique referral link and, if coupons are enabled, a unique coupon code. When a visitor uses either, the extension links them to that affiliate.

chevron-down chevron-right

Can affiliates share links to specific products?

Yes. Affiliates can share a referral link to any product page. With the AddToAny social sharing buttons turned on, they see sharing buttons on product pages with the hint "Promote this product with your affiliate link". The extension does not add external products from other sites to your catalog.

chevron-down chevron-right

Is the commission deducted if an order is refunded or canceled?

Yes. The commission is deducted when you create a credit memo (refund) for the order or when the order reaches the cancelling status you set, Closed by default. A holding period gives you time to catch returns before the commission reaches the affiliate's balance.

chevron-down chevron-right

When does a commission reach the affiliate's balance?

When the order reaches the status you choose (Complete by default) and the holding period, if you set one, is over.

chevron-down chevron-right

Is the commission calculated on shipping and tax?

It depends on the program. A percentage of the order total includes shipping, and you decide whether tax is included. A percentage of the subtotal covers the products only. You can also pay a fixed amount per order.

chevron-down chevron-right

Can I run several affiliate programs at once?

Yes, as many as you need. Each program has a priority, active dates, store views and customer groups, and can stop lower programs from applying to the same order. Hidden programs are assigned to particular affiliates only.

chevron-down chevron-right

Does it support multi-level commissions?

No. The commission goes to the affiliate who referred the customer. To reward your best affiliates, give their group a higher rate and let affiliates move into it automatically as their sales grow, or set a different rate for a customer's first order and repeat orders.

chevron-down chevron-right

How are affiliates paid?

Affiliates request a payout from their account once their balance reaches your minimum (50 by default). They choose PayPal, Skrill or another method you add and enter their payment details. You approve the request, send the money and mark the payout as completed.

Requests can also be created and approved automatically every week or month. With Store Credit & Refund, you can pay to the affiliate's store credit balance in one click.

chevron-down chevron-right

Does it have an API? Does it support GraphQL?

The extension has a REST API for affiliate accounts, programs, groups, coupons, banners, transactions, payouts and referred customers. There is no GraphQL support.

chevron-down chevron-right

Does it work with Hyvä?

Yes. The Hyvä package is included and covers the affiliate account pages and the product widget. The extension also supports the Breeze theme.

chevron-down chevron-right

Is there a free version?

No, but you can try the frontend, backend and Hyvä demos before you buy, and the purchase is covered by a money-back guarantee.

Changelog
Version 1.10.1Oct 28, 2026
For developers: withdrawals and affiliate events can now be deleted through WithdrawRepository and EventRepository with delete() and deleteById(), the same way as banners. Until now these repositories could save records but not remove them. EventRepository::get() is now declared to always return an event, because it throws an error when the event does not exist
Fixed affiliate program conditions being skipped for bundle products, and for orders whose shopping cart had already been cleaned up. The "Affiliate Account" conditions (lifetime commission, "Is an affiliate", "Affiliate client") and the "General" conditions always matched such lines, so commission was paid on them even when the program's conditions should have excluded them. These lines are now checked against the program's conditions like any other line. For an order line, the customer is taken from the order; a line without its order is checked as a guest's
Fixed saving an affiliate transaction for an account that does not exist (deleted, or a missing or zero account ID) failing with a PHP fatal error. The save is now refused with a clear "no such entity" error
Fixed a PHP warning in the new-affiliate notification email when an affiliate account was created without a status. The email is now sent with the status left blank
Version 1.10.0Oct 26, 2026
Sale waiting period - A new "Sale waiting period (days)" setting under the commission settings (default 90) sets how long an affiliate sale waits for its order to earn commission. After that the sale is closed with no commission and the reason "not completed within N days"; it is checked again only if the order is saved later. Set it to 0 to wait forever
Compatible with Mirasvit Core 2.0 — the module can now be installed alongside both the 1.x and 2.0 versions of the core package
Affiliate sales that can never earn commission are no longer re-checked by cron every minute. A sale whose order is canceled or closed is now closed with no commission and the reason "order canceled" or "order closed", and a sale that has already earned its commission is closed again when its order is re-saved (a later credit memo still reverses the commission as before). This removes constant background work on stores with many old orders
⚠️ Database change in mst_affiliate_event - the type column changes from text to varchar(255) and a new index on is_processed + type is added, so the cron finds unprocessed events faster. Run bin/magento setup:upgrade after updating
Fixed affiliate email notifications and AddToAny share-button settings set on a website or store view being ignored in favour of the default value. The new-affiliate and withdrawal admin notifications (whether they are enabled, the email templates, sender and copy-to addresses), the affiliate's own emails and the AddToAny settings now use the value of the affiliate's store
Fixed sales closed without commission (canceled, closed or not completed in time) being counted as orders in affiliate group conditions. They are now left out, and a sale that earns commission later no longer keeps its old "no commission" reason
Fixed deleting a referred customer that no longer exists failing with an error in the admin. It now shows "This relation no longer exists."
Version 1.9.2Oct 22, 2026
Fixed the affiliate's statistics charts in the customer account showing a label one day off - for example, "Dec 31" for January 1 - in stores whose timezone is behind UTC (such as Los Angeles) at certain times of day. Each label now shows its own day in the store timezone
Fixed statistics charts grouped by week labelling each week with the following Sunday in some years, such as 2023 and early January 2024. Each weekly bar is now labelled with the Sunday its own week starts on
Fixed setup:upgrade aborting with an error during the payment method settings migration on stores where the old affiliate payment method setting was saved in more than one scope (for example, default and a website). Every scope is now migrated into its own setting, and a scope that was already migrated is left as it is
Fixed the embeddable affiliate widget failing with a server error on the affiliate's website when it had nothing to display (on PHP 8). An empty widget is now returned as empty
Fixed the "Is an affiliate" and "Affiliate client" program conditions set to "No": they never matched, so a shopper who is not an affiliate or not referred by one did not get the program. "No" now matches such shoppers, and when the account check fails because of an error the shopper matches neither "Yes" nor "No" instead of being treated as "No"
Fixed affiliate coupon code patterns that start with a character set or a length, such as [A-Z]{4} or {3}, being rejected as invalid
Fixed coupon code patterns with an empty character set, such as [], []{3} or A[], causing an error during coupon generation - they are now rejected as invalid. A pattern starting with a length followed by more text, such as {3}[A-Z], is now rejected too, instead of silently producing a shorter code than expected
Fixed the admin edit page of an affiliate account failing with "Unable to unserialize value" when the account's website, migrated from an earlier version, contained a quote or a backslash. The website is now stored correctly during the upgrade, and ordinary websites are stored exactly as before
Version 1.9.1Oct 20, 2026
Fixed the affiliate share buttons (AddToAny) producing a broken link for a page whose URL has a query string, such as product.html?color=red: the referral parameter was glued on with a second ? and the query ended up inside the page path, so the visitor was not credited to the affiliate. The shared link now keeps the page's query string intact and adds the referral parameter to it with &
Fixed the banner image link that affiliates place on their websites when the banner's image file is missing: it failed with a server error, and on remote media storage (such as Amazon S3) it returned an empty, broken image. It now returns a transparent pixel, so the affiliate's page shows no broken image
Fixed statistics charts grouped by month showing each month's data under the following month - for example, January's sales and clicks appeared under February
Fixed the affiliate account form breaking when an additional account field (Additional Account Fields) had been saved without the "Required" setting
Version 1.9.0Oct 16, 2026
Hyvä support now ships with the extension - The companion package mirasvit/module-affiliate-hyva is gone: the affiliate account pages, referral tracking, the programs and sign-in widgets, the product share buttons and the embeddable product widget are now part of Affiliate itself. There is no second package to find and keep in step, and on a Luma store the Hyvä part simply stays dormant. Composer removes the companion package by itself when you upgrade. On Hyvä the account pages keep the look they had with the companion package, and on Luma and Breeze the look they had before.
⚠️ Hyva_MirasvitAffiliate is gone, not renamed - You only need to act if you referenced it yourself: in a custom di.xml, a layout file, or a deployment script that enables modules by name.
⚠️ If you overrode a Hyvä template in your theme, repoint it - Hyva_MirasvitAffiliate::<path>.phtml is now Mirasvit_Affiliate::<path>.phtml. An override at the old path is simply not read, with no error to say so.
The statistics date range now uses the browser's own date fields on every theme. Links with a date range saved before the update keep working.
After upgrading a Hyvä store, run bin/magento hyva:config:generate and rebuild your theme's Tailwind CSS.
⚠️ Admin actions that change data now accept POST requests only - saving accounts, programs, groups, banners, transactions and withdrawals, deleting accounts, programs, groups, banners and referred customers, inline edits, banner uploads, saving the "Additional Account Fields" page and "Register as Affiliate" on the customer page. The admin screens already send them this way. You only need to act if a custom script or bookmark opened one of these URLs directly.
⚠️ The group refresh command is now bin/magento mirasvit:affiliate:group:refresh - the old name mirasvit:affiliate:refresh-group still works for this release. Update cron jobs and deployment scripts that call it.
⚠️ *For developers: the per-form GenericButton, SaveButton and SaveAndContinueButton classes under `Ui//Form/Controlare gone** - the forms now shareUi\Form\Control\AbstractButtonandSaveSplitButton`. Code that extended the old classes has to move to the shared ones.
⚠️ For developers: Service\CouponGenerateService is gone - CouponService generates the affiliate coupon codes itself. Code that called the old class has to use CouponService::ensureCoupon().
For developers: Api\Data\TierInterface and GroupRepository::getDefaultGroup() are deprecated in favour of Model\Tier and GroupRepository::getByIsDefault(). They keep working. The constructors of AnalyticsService and CouponService changed, which matters only to a subclass that passes their arguments by position.
Admin forms have one split "Save" button: the button saves and keeps the form open, its menu holds "Save & Close". It replaces the separate "Save" and "Save and continue edit" buttons.
Clicking a row in the accounts, programs, groups, banners, transactions and withdrawals grids opens the record. The grids can also show the form fields they used to leave out, such as store views and payment method, through the "Columns" menu.
Admin page titles, buttons, menu entries and messages use consistent wording and capitalisation.
Hyvä: the programs widget showed only the public programs on cached pages - the affiliate's own programs never loaded there. Luma was unaffected.
Hyvä: the programs widget opened with no program shown unless the first program happened to have ID 1. Luma was unaffected.
Hyvä: a statistics range started at the current time of day instead of the start of the "From" day, so that day's earlier events were left out. Luma was unaffected.
Hyvä: a withdrawal amount with cents (such as 10.50) was rejected by the amount field. Luma was unaffected.
Hyvä: a referred customer's tracking cookies were not re-aligned to the date they were linked to the affiliate, as they are on Luma.
The referral product widget showed no products in "Bestsellers" mode in a store view without orders of its own, such as a second store view for another theme. It now counts the sales of the whole website.
Breeze: the referral product widget failed to load with a server error. It now shows its products as on Luma.
Luma: an empty box showed in the withdrawal amount field in place of an icon that was never loaded.
A referral visit kept only part of a referring URL with a query string - everything after its first & was lost.
An existing transaction opened under the title "Add transaction" in the admin. It now says "View Transaction".
Opening or saving an admin record that had been deleted in the meantime ended in an error page instead of the "This ... no longer exists." message.
The status column of the withdrawals grid was labelled "Type".
The programs widget failed to render when a commission tier or an affiliate pointed at a deleted affiliate group. Such a tier is now skipped and the missing group is written to the log.
Reasons to choose Mirasvit
Client focusing and satisfaction

These are our primary. A major portion of our new clients come from referrals from our existing clients. Our professional team of developers, marketers and support staff have invested the best knowledge and experience in the field into our work, so you know you can come back to us again and again.

Remarkable support

One year free and high quality support. We go to great lengths to provide maximum satisfaction with every module you have purchased in our store. By helping you with installation, configuration, answering your every question, we do all our best to eliminate any possible problems.

Risk-free Investment

30-days money back guarantee. If you are not satisfied with our extension performance for any reason, we provide a full refund.

Constant improvements and upgrades

We constantly add new features to all our modules, and are always interested in hearing your opinion and implementing your suggested features in our future developments.

Comprehensive Documentation

We provide an expanded user guide for every aspect of our extension, so you can find answers for all your burning questions.

Unencrypted source code of our products

You can customize extension according to your needs and requirements.

Usability and Performance

The Module is easy to install and upgrade, just follow our step-by-step user guide. Additionally, the extension is ready to use with the Hyvä theme.

Ready for Magento Cloud

No core modifications. The extension has been tested in a Magento Cloud environment and is fully compatible with it.

Loading...