Skip to content

Release 1.0.0 · Laravel 13 on PHP 8.3+

Run your own ad network from ad server to payout queue

Rovads is a self-hosted advertising network. Advertisers fund prepaid impression or click credit, publishers verify their domains and paste an ad tag, and an administrator approves the campaigns, the deposits and the withdrawals. Seven ad formats, two account consoles, one admin panel and the full Laravel source.

  • Regular licence, single installation
  • 7 ad formats, 8 IAB display sizes, 3 language files
  • One-time payment — no per-impression fee to us
Rovads · Admin
The Rovads admin dashboard with publisher, advertiser, deposit and withdrawal summaries

What the platform covers

Two consoles, one admin Separate advertiser and publisher guards, with moderation screens for domains, ads, deposits and withdrawals.
Seven formats, one ad server Display, text, in-page push, web push, popunder, vignette and playable, with copy-paste publisher tags.
Domain-gated serving A domain must be verified before its ad tags can request a campaign. Keywords are stored per domain.
Reviewed payouts Publisher withdrawals are queued, fee-checked and paid by you. A rejection refunds the held amount.

What ships in the box

41 tables in the shipped schema
7 ad formats on one platform
29 payment-gateway callback routes
17 notification templates
19 documentation pages
6 installer steps
9 PHP extensions the installer checks
1 scheduled command in the whole app

Counts are of the files and schema in the release you receive. A callback route is code, not a merchant account: the gateways and payout methods are yours to configure. CPM and CPC both default to zero, so the economics are also yours to set.

Product Tour

A live demo, plus four real screens

A demo is available at rovads.hansaldev.com for you to click through. The archive also ships four genuine captures from the release, and this page uses all four rather than filling the gallery with mockups.

  • The public home, the advertiser sign-in and the publisher sign-in.
  • The admin dashboard, with its moderation queue and finance counters.
  • No published credentials. The installer creates your administrator in step five, with an eight-character minimum password.
  • The demo middleware is not attached. It blocks POST, PUT and DELETE requests, but no route uses it, and it does not seed any data.

The demo is a shared instance with no published credentials. Treat anything you enter there as public. The four captures and the documentation are the honest preview of what ships.

Rovads · Public home
The Rovads public home page with publisher and advertiser calls to action
The Problem

An ad network is two products and a referee

Advertisers buy attention, publishers sell it, and someone has to verify both sides and move the money.

Two audiences, two account systems

An advertiser needs a balance, a campaign builder and reporting. A publisher needs domain proof, ad tags and earnings. Sharing one login between them is a support problem on day one and a permissions problem forever.

Serving is a pipeline, not a page

The ad request has to resolve a verified domain, pick an eligible campaign for that format and country, ignore a repeat from the same IP inside the interval, write an impression and a ledger row, and return the creative.

Push is its own infrastructure

Web push needs VAPID keys, a service worker, a subscription endpoint tied to a verified domain, a delivery log, a frequency cap and a scheduler. It is not a checkbox beside a banner.

Payouts are a queue you work

A publisher requests a withdrawal, the fee has to be calculated from the method record, the balance has to leave immediately, and a rejection has to put it back. Someone still has to send the money.

Rovads puts both consoles and the referee in one Laravel application, and leaves the commercial decisions where they belong: with you.

Core Features

What the platform actually does

Grouped by the job each part performs. Every card describes a shipped screen or a real code path.

Seven formats and one delivery model. The publisher pastes a tag for the size or behaviour it wants; the ad request resolves a campaign and writes the accounting in the same request.

Eight IAB display sizes

Leaderboard 728×90, billboard 970×250, medium rectangle 300×250, large rectangle 336×280, half page 300×600, wide skyscraper 160×600, mobile banner 320×50 and large mobile banner 320×100. Uploads are checked against the exact width and height before they are accepted.

Text ads

A headline, description, display URL, language and UTM fields, rendered as a labelled text unit. Text ads can auto-approve or wait for an administrator, depending on the setting.

In-page push

A small image card anchored in the corner of the page, built from the ad's icon, title, body and call to action. It behaves like a push notification without requiring a browser subscription.

Web push

A separate push campaign type with a service worker, VAPID keys, a subscriber table and a delivery log. Subscriptions are accepted only for a verified publisher domain, and 404 or 410 responses revoke the subscription automatically.

Popunder

A click-triggered script that opens the campaign once, then stores a thirty-minute cooldown in the visitor's local storage so a second click does not open a second window.

Vignette

A full-screen overlay with a centred creative and a close control, loaded from its own publisher script. It is a separate format in the admin, not a display size with different CSS.

Playable HTML5

A ZIP with a root index.html and allowlisted assets. The server rejects external URLs, popups, redirects and breakout attempts, injects clickTag, and serves the creative in a sandboxed iframe that exposes Bitmedia.ready and Bitmedia.exitClick.

One tag per slot

The publisher console prints the exact tag for each active type: ad.js for display and text, push.js for in-page push, popunder.js and vignette.js for the behavioural formats.

A fresh install has no ad types. The installer imports the schema only; it does not run DatabaseSeeder. Create the formats in the admin, or run the included AdTypeSeeder to add the eight IAB sizes plus text, in-page push and push types. Popunder, vignette and playable types are created in the admin's ad-type screen. Verified in the installer and AdTypeSeeder

The buy side: an advertiser account, prepaid credit, a campaign per format, two targeting filters and reporting by country and ad title. There is no campaign scheduler, and the page says so below.

A separate advertiser guard

Registration, login, password reset and profile editing are their own guard and their own session. An advertiser never shares a login with a publisher or an administrator.

Prepaid impression and click credit

Plans are purchased from the advertiser balance and add either impression credit or click credit. Six demo plans ship in PlanPriceSeeder; the admin can create and toggle its own. A campaign stops when its credit reaches zero.

Deposits through gateway callbacks

Advertiser deposits run through the gateway module, with 29 callback routes in routes/ipn.php covering Stripe, PayPal, Razorpay, Mollie, CoinGate, BTCPay, NowPayments and others. Automatic and manual gateway types are both supported.

A campaign builder per format

Choose an active ad type, a click or impression billing mode, a destination URL and the creative fields that format needs. Display uploads must match the type's exact resolution; playable campaigns require a valid ZIP.

Country targeting, when enabled

An advertiser can target a list of countries or mark the campaign global. The visitor's country is resolved through the ipstack key in settings, and only when check_country is switched on.

Domain-keyword targeting

Publishers tag a verified domain with suggested keywords. When check_domain_keyword is on, the selector only returns campaigns whose keyword list matches one of those terms.

UTM parameters preserved

Source, medium, campaign, term and content are stored per campaign and appended to the destination URL when the click is redirected, with the correct separator for a URL that already has a query string.

Moderation and reporting

Text, in-page push, playable and push campaigns have their own auto-approve switches; the rest wait for an administrator. The report screen totals impressions, clicks and CTR and can search by country or ad title.

No campaign budget, start date or pacing. The advertiser form has no budget field, no start date and no scheduling control. The only expiry field in the schema, expires_at, is exposed only on provider ads created in the admin; the eligible scope honours it, but an advertiser cannot set it. A campaign runs while it is active and has prepaid credit. Stated here because the admin and advertiser forms do not say it

The sell side: a publisher account, domain verification, copy-paste ad tags, slot-level reporting and a withdrawal queue. The same IP, interval and blocked-IP guards apply to every served impression.

A separate publisher guard

Registration, login, password reset and optional Google two-factor authentication are their own guard. A publisher never shares a session with an advertiser or an administrator.

Domain verification, two ways

A publisher submits a domain with suggested keywords. The platform generates a 32-character code and a text file name; the publisher places a text file at the domain root and asks the panel to check it. Depending on the domain_approval setting, the domain is either verified immediately or held for an administrator. Only verified domains can serve.

Copy-paste ad scripts

The Ad Scripts screen lists every active ad type with its copyable tag: ad.js for display and text, push.js for in-page push, popunder.js and vignette.js for the behavioural formats. It also shows the publisher's counts of slots, clicks and impressions.

Slot-level reporting

A Published Ads screen shows every slot with its impressions, clicks and CTR, plus a details view per campaign. A day-to-day earnings report and a per-ad report are also available.

A withdrawal queue you work

Seven method templates ship in the demo seeder (bank transfer, PayPal, Payoneer, Wise, Skrill, USDT, mobile money). Each method carries its own min/max, fixed plus percent charge, rate and currency. The publisher requests an amount inside the limits, the fee and final amount are calculated, the balance is held at submit, and an administrator approves or rejects. Rejection refunds the held amount and writes a withdraw_reject transaction.

Push subscriptions on verified domains

A publisher's verified domain is the anchor for web push subscriptions. The browser subscription is accepted only for a domain the panel recognises, and a 404 or 410 response from the endpoint revokes it automatically.

No revenue-share percentage is configurable. Every served impression and click credits the publisher with the global CPM or CPC rate and, for advertiser-funded campaigns, writes a matching spend transaction against the advertiser's prepaid credit. There is no per-publisher or per-site revenue split in the schema, and no separate network margin setting. Stated here because nothing in the product says it

One administrator role with the full console. The screens below are the ones that exist: moderation, money flow, reporting and settings. There is no staff permission grid and no audit-log screen beyond the notification and login histories.

Moderation queue

Publishers, advertisers, domains, all ads, deposits, withdrawals and support tickets are listed with pending filters. The dashboard shows the counts of pending deposits, withdrawals, domains and open tickets alongside publisher, advertiser and finance totals.

Advertise manager

All advertiser campaigns with status toggles, provider ads created directly by the administrator with an optional expiry date, plan prices, ad types, the CPC and CPM rates, IP logs with block and unblock, blocked IP logs, keyword management and ad-language management.

Domain and user management

Domain approval and rejection, publisher and advertiser lists with email and mobile verification states, profile and password management, and login history for both account types.

Money flow

Automatic and manual gateways, deposit history, withdrawal methods, pending, approved and rejected withdrawals, and the withdrawal log. The administrator pays out of band; the software does not move money to any provider.

Reporting

Publisher earning log, advertiser transaction log, login histories, notification history and the advertiser report by country and ad title with totals, clicks, impressions and CTR.

Settings and frontend

General, system configuration, logo and favicon, extensions, language, SEO, notification templates, global, email and SMS settings, frontend templates, pages and sections, maintenance mode, GDPR cookie, cache and custom CSS. Site name, logo, favicon, meta tags, social links and head and footer code are all editable here.

Single role, no permission grid. There is one administrator account created during installation. There is no staff role, no permission matrix and no audit-log screen beyond notification and login histories. Colours are not an admin setting: changing the palette means editing the theme CSS. Stated here because the admin screens do not say it

The infrastructure the platform runs on: web push, the one scheduled command, the rate limits and the installer. None of it is a queue worker or a separate service to host.

Web push, end to end

VAPID keys are generated in the admin, the service worker is served at /sw.js, and a subscription is accepted only for a verified publisher domain. The default batch size is 100 and the default frequency cap is 3 notifications per subscriber per day. The push auto-approve switch controls whether a new push campaign goes live immediately.

One scheduled command

php artisan push:send runs every minute and is the only entry in the scheduler. There are no queue jobs and QUEUE_CONNECTION is sync. The cron line for it is the only recurring job the platform needs.

Rate limits on every entry point

Ad serving 120 per minute per IP, push subscription 30 per minute per IP, push click 60 per minute per IP, and the API limiter 60 per minute. IP tracking records country, browser and operating system, and an administrator can block an IP from the log.

Frontend and languages

One frontend template ships, basic, with 224 Blade views. Three language files are included (English, Hindi and Bengali) and the admin can edit and add translations. Both layouts hard-code dir="ltr", so there is no RTL support.

Installer and requirements

Six steps: licence, requirements, database, setup, administrator, finish. It checks PHP 8.3 or newer, nine extensions and seven writable directories, imports database/install.sql, and creates the administrator with an eight-character minimum password. It does not run DatabaseSeeder.

No build step

There is no Vite or Mix configuration and no Node dependency. Composer installs the PHP dependencies, the installer imports the schema, and the application runs. Outbound HTTPS is needed for the ipstack geo lookup and mail transport.

CPM and CPC default to zero. Both columns in database/install.sql default to 0.00000000. Until an administrator sets them in the CPC and CPM screen, every served impression and click is valued at zero for both sides. Verified in the schema
The Solution

The serving loop, end to end

Every step below is a real code path, and every one of them writes to the same tables.

  1. 1 The operator installs and prices. Six-step installer, then the CPC and CPM screen, the ad types (or the included AdTypeSeeder), and the plan prices the advertisers will buy.
  2. 2 The advertiser registers and deposits. A separate guard, a prepaid balance funded through one of 30 gateway callback routes, and a plan purchase that adds impression or click credit.
  3. 3 The advertiser builds a campaign. An ad type, a billing mode, a destination URL, the creative and its UTM fields, plus an optional country list or the global flag, and an optional keyword list. Text, in-page push, playable and push campaigns pass through their own auto-approve switches; the rest wait for an administrator.
  4. 4 The publisher registers and verifies a domain. A domain name and suggested keywords, a generated code in a text file at the domain root, and an approval step that depends on the domain_approval setting.
  5. 5 The publisher pastes the ad tag. The platform returns the tag for each active ad type. When a visitor loads the page, the tag calls /ads/{publisher}/{type}/....
  6. 6 The request is resolved. The domain must be verified, the IP must not be blocked, and the same IP must not have been served the same ad inside the configured interval. The selector filters by ad type, country when check_country is on, and domain keywords when check_domain_keyword is on, then picks at random.
  7. 7 The impression or click is recorded. An IP log row, a publisher slot count, an earning log row, a publisher earnings increment, and, for advertiser-funded campaigns, an advertiser transaction and a credit decrement. A missing credit deactivates the campaign.
  8. 8 The publisher requests a withdrawal. The method's fee is calculated, the balance is held, the request is queued, and an administrator is notified.
  9. 9 The administrator approves or rejects. Approval changes the status and notifies the publisher. Rejection refunds the held amount and writes a withdraw_reject transaction. The administrator pays out of band.
  10. 10 Push campaigns run on the cron. push:send runs every minute, sends in batches of 100, and honours a per-subscriber daily cap. 404 and 410 responses revoke the subscription.
Product Tour

Four genuine screens, as they ship

Captured from the release. Filter by area, then select any image to open it full size.

The public home counters are demo content from a seeded installation. Your installation starts with no publishers, no advertisers and no campaigns. The advertiser and publisher screens show their sign-in forms because there is no shared demo account to publish.

Technical Details

The stack, as shipped

Standard Laravel and MySQL, with a pre-built frontend. Nothing exotic to host.

Laravel 13on PHP 8.3 or newer
MySQL41 tables, one SQL file
Blade + Bootstrapone template, 224 views
Sanctumauth for the three guards
Web pushVAPID, service worker, cron
37 testsPHPUnit 12 against the suite
Six-step installerchecks the server, writes the env
Named rate limiterson every entry point
3 languagesen, hn, bn; LTR only
30 gateways29 IPN callback routes
No public API ships. routes/api.php does not exist, and there is no versioned REST or JSON endpoint for external clients. The application is a web product with three browser-facing guards and IPN callbacks for gateways. Verified in the release tree
How It Works

From purchase to your first withdrawal

The operator's path, then the advertiser's and the publisher's.

Install it

Point a vhost at the release, make the storage directory writable, and open the site. A six-step installer checks the server, writes the environment file, imports the schema and creates your administrator account with an eight-character minimum password.

Price and stock it

Set CPM and CPC, create the ad types (or run AdTypeSeeder), and create the plan prices advertisers will buy. None of these ship with usable values.

Brand it

Site name, logo, favicon, social image, meta tags, social links and head and footer code, all from the admin. Send yourself a test impression to prove the loop works before you invite anyone.

Connect gateways

Configure the automatic or manual gateway records with your own credentials. All 30 ship with test credentials and must be replaced before launch.

Open registration

Flip the registration switch, point mail at a real transport so verification codes send, and let advertisers and publishers in. The captcha is already on.

Run the cron

Add * * * * * php artisan push:send to your cron. It is the only scheduled command and it is what delivers web push. Outbound HTTPS is required for the geo lookup and mail.

Requirements

What your server needs

Checked automatically by the installer, which will not continue until they pass.

Requirement Detail
PHP 8.3.0 or newer
Extensions pdo, pdo_mysql, mbstring, openssl, tokenizer, xml, ctype, json, and fileinfo
Writable paths The project root, the storage directory and the bootstrap cache directory, plus four more directories the installer checks
Database MySQL, reachable with the credentials you enter in the installer
Web server Anything that can serve a Laravel application, with .htaccess support if you use Apache. An IIS configuration file ships with the release.
Cron Required — push:send runs every minute, and the platform depends on it for web push delivery
Outbound HTTPS Required for the ipstack geo lookup used in country targeting and for mail transports
Mail A real transport is required to send verification codes and notifications. The installer's default writes mail to a log file instead.
Node.js Not required. The frontend ships as Blade views.

Before you buy, worth knowing

  • You need a server you control, and a cron you actually run.
  • You need your own advertiser and publisher traffic; the platform does not bring either.
  • You need your own gateway credentials; all 30 ship with test values.
  • You need to set CPM and CPC yourself; both default to zero.
  • You need to create ad types and plan prices; none ship in the schema.
  • SSL is expected. Turn on the force-SSL switch once you have a certificate.
  • Configure a real mail transport before you open registration, or verification codes go nowhere.
  • The ipstack key is required for country targeting; without it, that filter is inert.
Documentation

19 pages, shipped in the box

Written against this release and versioned with it. The documentation is included in the archive you receive, alongside the source and the schema.

Getting started

Introduction, installation, requirements, initial configuration, interface navigation, deployment and troubleshooting.

Running the network

Ad formats, price plans, payments, push campaigns and domain verification end to end.

Operating it

Admin guide, advertiser guide, publisher guide, user accounts and permissions.

Reference

Settings and customization, maintenance and updates, version support, and an FAQ.

Bundled, not hosted. The documentation ships inside the release, so it travels with the code and matches the version you hold. No separate documentation URL is published for this product. Versioned with the release
Terms

Licence, updates and support

Plain statements, including the parts that are limited.

Licence

You receive the complete source code and the right to run it on a server you control and modify it for your own operation.

The product is sold as a regular licence for a single installation. You cannot resell or redistribute the source as a competing product. The full terms are presented and accepted during installation, so they are recorded on your own instance as well as here. The store's refund policy and the licence field on this listing are what apply.

Updates

You get a maintenance and updates guide with the release, and the source is yours to maintain. The release is built from committed source rather than from a vendor's working copy, so the archive you hold matches the documented version.

Future releases are a commercial question for the vendor at the point of purchase. This page does not promise a lifetime update commitment, because none has been contracted.

Support

HansalDev provides support on a commercial basis, and you can raise a request through the contact form before or after purchase.

This page deliberately makes no response-time or 24/7 availability promise. The shipped documentation says the same thing: no support policy, response time, channel or contact has been committed, so none is quoted here.

Contact HansalDev

FAQ

Questions a technical buyer asks

Answered from what the release actually does.

Yes, in full. The Laravel application, the admin panel, the publisher and advertiser consoles, the schema, the installer and 19 pages of documentation. There is no compiled or minified first-party asset; the only minified third-party file is the offer-delivery script.

Point your vhost at the release, make the storage directory writable, and open the site. A six-step installer checks PHP 8.3 or newer and nine extensions, writes the environment file, imports the schema and creates your administrator account. No command line is needed to complete the install.

PHP 8.3 or newer with nine specific extensions, MySQL, seven writable paths, working outbound HTTPS, and a cron you actually run. Node.js is not required because the frontend ships as Blade views.

Yes, at rovads.hansaldev.com. It is a shared instance with no published credentials, so treat anything you enter there as public. The archive also ships four genuine captures from the release, and this page uses all four. The "demo" middleware is registered in the HTTP kernel but is not attached to a single route.

They register under their own guard, deposit through one of the configured gateways, and buy a plan that adds impression or click credit. Then they choose an active ad type, a billing mode, a destination URL and the creative fields that format needs, with an optional country list or the global flag and an optional keyword list. Display uploads must match the type's exact resolution and playable campaigns require a valid ZIP.

Country targeting, when the check_country setting is on and an ipstack key is configured, and domain-keyword targeting, when check_domain_keyword is on. There is no device, browser, operating system or language targeting: the language column is stored on an ad but is never read by the ad selection service.

No. The advertiser form has no budget field, no start date and no scheduling control. The only expiry field in the schema, expires_at, is exposed only on provider ads created in the admin, and the eligible scope honours it. A campaign runs while it is active and has prepaid credit.

Both default to 0.00000000 in database/install.sql. An administrator sets them on the CPC and CPM screen, and the same value applies to every served impression or click. There is no per-campaign or per-advertiser rate.

A publisher submits a domain with suggested keywords. The platform generates a 32-character code and a text file name; the publisher places a text file containing that code at the domain root and asks the panel to check it over HTTP. Depending on the domain_approval setting, the domain is either verified immediately or held for an administrator. Only verified domains can serve, and their keywords are used for keyword targeting.

By you. A publisher requests a withdrawal inside the method's limits, the fee is calculated from the method record, the balance is held at submit, and an administrator approves or rejects. Approval only changes the status; rejection refunds the held amount and writes a withdraw_reject transaction. The software has no automated payout adapter for any provider.

Seven demo templates: bank transfer, PayPal, Payoneer, Wise, Skrill, USDT and mobile money. Each carries its own min and max, fixed plus percent charge, rate and currency. They are demo seeders, so a fresh install has none until you create or seed them.

VAPID keys are generated in the admin, the service worker is served at /sw.js, and subscriptions are accepted only for a verified publisher domain. The default batch size is 100 and the default frequency cap is 3 notifications per subscriber per day. push:send runs every minute. A 404 or 410 response revokes the subscription automatically.

A ZIP archive with a root index.html and allowlisted assets. The server rejects external URLs, popups, redirects and breakout attempts, injects clickTag, and serves the creative in a sandboxed iframe that exposes Bitmedia.ready and Bitmedia.exitClick. Playable campaigns can be auto-approved or held for an administrator.

IP tracking records country, browser and operating system per visitor, the same IP cannot be served the same ad inside the configured interval, blocked IPs are refused, and administrators can block an IP from the log. There is no VPN or proxy detection and no device fingerprinting beyond the user-agent string.

No. routes/api.php does not exist, and there is no versioned REST or JSON endpoint for external clients. The application exposes browser-facing guards and IPN callbacks for gateways.

Three language files ship: English, Hindi and Bengali. The admin can edit and add translations. Both layouts hard-code dir="ltr", so there is no RTL support.

One: the basic template, with 224 Blade views. The admin can manage templates, pages and sections, but only one template exists in the release. Changing the colour palette means editing the theme CSS; colours are not an admin setting.

No, and that is deliberate. The schema ships with an empty user table and the administrator is created during installation with an eight-character minimum password. There are no demo users, campaigns or publishers in a fresh install.

The schema only. No ad types, no plan prices, no campaigns, no publishers, no advertisers, no withdrawal methods, no demo content and no CPM or CPC values. The included seeders (ad types, plan prices, withdrawal methods) are there to run deliberately.

37 PHPUnit test methods covering the installer, the controllers and the core models, running against PHPUnit 12 on PHP 8.3.

You get a maintenance and updates guide with the release, and the source is yours to maintain. Future releases are a commercial question for the vendor at the point of purchase. This page does not promise free lifetime updates, because no such commitment has been contracted.

Yes. The site-wide Refund Policy covers every product sold here: refund requests can be made within 14 days of the transaction date, with clear rules for what qualifies and what does not. Read it before you buy, and ask through the contact page if anything is unclear.

Support is available on a commercial basis and can be arranged before purchase. No response-time or 24/7 commitment is stated here, because none has been contracted. The shipped documentation takes the same position.

The licence covers one installation. Running several separate public instances is outside it. A single installation can host many publishers and domains, but that is not the same as several instances.

The store listing carries version 1.0.0, which is the version the documentation set is written against.
Pricing

One price, for the source code

A single Regular licence. No per-impression fee to us and no revenue share.

Prerequisites

What you bring

None of this is held back from you deliberately. Some of it can only be issued to you personally, and the rest is your operation to run.

Not included in the price

  • A server you control. You receive the application, not a running instance. SSL and a real mail transport are yours to set up.
  • Gateway credentials. All 30 gateway records ship with test values and must be replaced before launch.
  • Advertiser and publisher traffic. The platform does not bring either; it is the software that runs the network.
  • CPM and CPC values. Both default to zero and are set by an administrator.
  • Ad types and plan prices. None ship in the schema; create them or run the included seeders.
  • Withdrawal methods. None ship in the schema; seven demo templates are available as seeders.
  • ipstack and mail credentials. Required for country targeting and for sending verification codes.
  • A colour or theme editor. Branding covers identity and assets. Palette changes mean editing CSS.
  • Custom development. The code is yours to extend; the package does not include bespoke feature work.
  • Any revenue or traffic promise. What the network earns depends on the advertisers and publishers you bring.
Open the live demo

No default administrator credentials ship with the release. The schema has an empty user table, an empty campaign catalogue and an empty ledger; your administrator is created during installation with an eight-character password minimum, and a release test asserts that no credential value is present in the seed.

No recurring fee

You pay once for the source. There is no per-impression charge, no revenue share to us, and no subscription to renew.

One installation

The licence covers one site you operate. A single installation can host many publishers and domains, but running several public instances is outside it.

Yours to maintain

The source is yours to host, modify and maintain. Future releases are a commercial question with the vendor.

Also From HansalDev
Popular Save $100.00

Offerwall & App Monetization Platform

Preads

Monetise your website or app with offerwall and content-locker integrations, postback tracking and monthly payout invoices.

  • Version 2.4.0
  • Offerwall
  • Monetization
  • Publisher

Run your own ad network

Get the source code, install it, set your rates, and connect the advertisers and publishers you already know.

Rovads — $49 one-time Regular licence · full source · 7 ad formats Demo Buy now
Copied