Filament Model Merger · Pro

Merge duplicates
field by field.

A three-way, IDE-style merge for FilamentPHP. Primary and duplicate side by side, a live Result column in the middle — pick the winning value for every field and relation, preview the outcome, then commit. Nothing lost, nothing guessed.

Merge Record · three-way comparison
Three-way merge screen: primary record, a central Result column, and the target record, with a picker for each conflicting field and relation.

Filament v3, v4 & v5

One package for every modern Filament version.

Laravel 10, 11 & 12

Compatible with all supported Laravel releases.

PHP 8.1+

Modern PHP with strict typing throughout.

A merge tool that respects your data.

No blind “keep the newest” guesswork. See every difference, decide every conflict, and preview the result before a single row is touched.

A conflicting field flipped to take the target value, highlighted in the Result column with a 'from target' label.

Decide every conflict — field by field.

Identical fields resolve themselves and fade into the background — only real conflicts ask for a decision. For each one, keep the primary value or take the target’s with a single click, or resolve them all at once with Use primary / Use target.

Identical values auto-resolve and stay out of your way
Per-field picker: keep primary or take target
Relations: Keep primary, Merge all, or Take target
Live record counts for every relation choice

Preview the outcome before anything changes.

Merging is destructive — so nothing is written until you say so. A dry-run preview lists exactly which fields move, how each relation is transferred, and warns you that the target record will be permanently deleted. No surprises, no irreversible mistakes.

See field changes before you commit
Per-relation transfer summary
Clear warning about the deleted target
Everything runs inside one DB transaction
Confirm Merge dialog previewing which fields and relations change, with a warning that the target record will be permanently deleted.
A Filament resource table with a Merge row action and a 'Find duplicates of this' link on every row.

One action in your table. Deduplication built in.

Add a Merge row action to any Filament Resource — no new screens to learn. Pair it with Filament Deduplication to scan for near-duplicates (exact, similar-text, levenshtein and numeric-range matching) and merge them straight from the same table.

Merge action drops into any Resource table
Works with Filament ActionGroup dropdowns
Detect duplicates first, then merge in one flow
Custom matching rules with weighted scoring
ProductResource.php
use PtPlugins\FilamentModelMerger\Concerns\HasMergeableFields;
use PtPlugins\FilamentModelMerger\Actions\MergeAction;

class ProductResource extends Resource
{
    use HasMergeableFields;

    // Relations transferred during a merge
    public static function getMergeableRelations(): array
    {
        return ['variants', 'tags', 'orderItems'];
    }

    public static function table(Table $table): Table
    {
        return $table->actions([
            MergeAction::make(),
        ]);
    }
}

Drops into any Resource.

Add one trait, list the relations to transfer, and register the merge page. Curate the comparison view with a typed infolist so money, dates and related labels render properly — not raw columns. beforeMerge() and afterMerge() hooks give you the final say.

Built for real-world data cleanup

Every merge is safe, auditable and fully under your control.

Complete audit trail

Every merge writes a MergeLog with JSON snapshots of both records, who performed it, and when. Polymorphic — works with any model.

Transaction-safe

Every merge runs inside a database transaction. If anything fails, the whole operation rolls back — no half-merged records.

Lifecycle hooks

beforeMerge() to veto a merge, afterMerge() to run cleanup. Full control over the merge lifecycle from your own model.

All relation types

HasMany, HasOne, BelongsToMany, MorphMany, MorphOne and MorphToMany are transferred automatically. No child records left behind.

Curated comparison

Define a typed infolist so fields render with the right formatting — money, dates and related labels instead of raw column values.

i18n ready

Ships with English and Serbian out of the box. Add your own language with a single translation file.

Get started in 3 steps

From purchase to merging records in your Filament panel — it only takes a few minutes.

1

Create an account

Register for free. No credit card required until you purchase.

2

Purchase a license

Choose Solo or Unlimited. Secure payment via Paddle. Instant access.

3

Install via Composer

Add our private repository and composer require — done.

Pricing plans

Choose the plan that fits your needs. Keep using your current version forever, even after your update period ends.

Solo

$29 / 1 site / 1 year updates

Perfect for freelancers and individual developers working on a single project.

Coming soon

After a year, optionally renew for $19 to continue receiving updates or stay on your current version forever.

Unlimited

Popular
$89 / unlimited sites / 1 year updates

For developers and agencies building multiple client projects.

Coming soon

After a year, optionally renew for $59 to continue receiving updates or stay on your current version forever.

Solo Unlimited
Activations 1 site Unlimited
1 year of updates included
Use current version forever
All core features
Composer access via Satis
Full source code
E-mail support
Priority support

Invoice available

Download after purchase

E-mail support

Get help when you need it

Regular updates

Continuously improved

Save 20%

Better together — Data Quality Bundle

Get Filament Model Merger + Filament Deduplication together and save 20%. Detect duplicates, review them, and merge — all in one workflow.

View Bundle →

Frequently asked questions

Everything you need to know about Filament Model Merger

Model Merger is a three-way, field-level merge. You see the primary and duplicate side by side with a live Result column in the middle, decide each conflicting field and relation individually, and preview the outcome before committing. Nothing is guessed or silently overwritten.

All 6: HasMany, HasOne, BelongsToMany, MorphMany, MorphOne and MorphToMany. For each relation you choose Keep primary, Merge all, or Take target — and the UI shows exactly how many records each choice produces.

You choose the strategy: it can be permanently deleted or soft-deleted. Either way, all selected relations are transferred to the primary record first, and the whole operation is logged.

Yes. Every merge creates a MergeLog record with full JSON snapshots of both records before the merge, the user who performed it, and a timestamp. The log uses a polymorphic relation so it works with any model.

Yes. A single license covers Filament v3, v4 and v5, on Laravel 10, 11 and 12. You install the version matching your Filament major from the same private repository.

Absolutely. The two are designed to work together: Deduplication detects near-duplicates with configurable matching rules and shows a "Merge" link that opens the three-way comparison directly.

After your first year, you can optionally renew your license at a discounted rate to continue receiving updates. If you choose not to renew, you keep permanent access to the version you had when your update period expired.

Yes! Contact us at mihailo@ptplugins.com and we'll apply a prorated upgrade — you only pay the difference ($60).

Yes, we offer a 7-day money-back guarantee. If the plugin doesn't work for your use case, contact us and we'll process a full refund. See our refund policy for details.

Ready to clean up your data?

See the three-way merge for yourself in the live demo — no signup required.