Looking to hire Laravel developers? Try LaraJobs

laravel-marketing-touchpoints maintained by mrustamzade

Description
Laravel package to track marketing touchpoints and connect them to orders.
Last update
2026/03/16 11:40 (dev-master)
License
Links
Downloads
4

Comments
comments powered by Disqus

Laravel Marketing Touchpoints

Track user marketing touchpoints (including UTM params) with a unique visitor token, then link the final order to that token after checkout.

Features

  • Generates a unique token cookie when a visitor arrives.
  • Stores each touchpoint in DB with URL, path, referrer, UTM data, and request metadata.
  • Links orders to the same visitor token after checkout.
  • Supports custom order table and primary key resolution.
  • Includes an admin route (/marketing) for viewing touchpoints by token or order ID.

Screenshot

Marketing Touchpoints Dashboard

Installation

composer require mrustamzade/laravel-marketing-touchpoints

Publish config and migrations:

php artisan vendor:publish --tag=marketing-touchpoints-config
php artisan vendor:publish --tag=marketing-touchpoints-migrations

Run migrations:

php artisan migrate

Enable Tracking Middleware

Option 1: Enable auto-injection in config:

'middleware' => [
    'auto_track_web' => true,
],

Option 2: Add alias manually to your routes/group:

Route::middleware(['web', 'track-touchpoints'])->group(function (): void {
    // your storefront routes
});

Link Order After Checkout

In checkout success flow:

use MRustamzade\MarketingTouchpoints\Facades\MarketingTouchpoints;

MarketingTouchpoints::linkOrder($order); // Eloquent model

Or scalar order ID:

MarketingTouchpoints::linkOrder($orderId);

Or pass full order reference:

MarketingTouchpoints::linkOrder([
    'table' => 'shop_orders',
    'primary_key' => 'uuid',
    'id' => $orderUuid,
]);

Optional model trait

Add this to your order model to auto-link when created:

use MRustamzade\MarketingTouchpoints\Concerns\LinksMarketingTouchpoints;

class Order extends Model
{
    use LinksMarketingTouchpoints;
}

Order Table + Primary Key Resolution

The package resolves order reference in this order:

  1. If you pass an Eloquent model to linkOrder(), it uses that model's table and key name.
  2. Else if orders.model is configured, it loads table/key from that model.
  3. Else it falls back to orders.table and orders.primary_key.

Set defaults in config/marketing-touchpoints.php:

'orders' => [
    'model' => App\Models\Order::class,
    'table' => 'orders',
    'primary_key' => 'id',
],

Admin Marketing Route

Default route:

  • URL: /marketing
  • middleware: web, auth
  • filters: ?token={token} or ?order_id={orderId}

Customize from config:

'route' => [
    'prefix' => 'marketing',
    'middleware' => ['web', 'auth'],
],

Config Summary

  • tables.visitors, tables.touchpoints, tables.conversions
  • orders.model, orders.table, orders.primary_key
  • middleware.except to skip tracking admin/internal routes
  • track.only_with_utm if you only want UTM-tagged touchpoints
  • track.dedupe_seconds to skip identical rapid reloads (set 0 to disable)