shahariarahmad / feedify
Generate product catalog feeds for Google Shopping, Meta/Facebook, Pinterest, and TikTok from any Laravel app. Ships with a built-in admin UI at /feedify, batch XML/CSV/TSV generation, scheduled refresh, attribute mapping, and a Fortify-style ProductRepository contract so you can plug in your own ca
Requires
- php: ^8.2
- illuminate/console: ^10.0|^11.0|^12.0
- illuminate/contracts: ^10.0|^11.0|^12.0
- illuminate/database: ^10.0|^11.0|^12.0
- illuminate/filesystem: ^10.0|^11.0|^12.0
- illuminate/http: ^10.0|^11.0|^12.0
- illuminate/queue: ^10.0|^11.0|^12.0
- illuminate/routing: ^10.0|^11.0|^12.0
- illuminate/support: ^10.0|^11.0|^12.0
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0|^10.0
- phpunit/phpunit: ^10.0|^11.0
README
composer require shahariar-ahmad/feedify
What is Feedify?
Feedify is a Laravel package that generates product catalog feeds for advertising and shopping channels — Google Shopping, Meta (Facebook / Instagram), Pinterest, TikTok, and custom merchants.
Install it into any Laravel project, open /feedify, create a feed, and get a public URL (XML/CSV/TSV/…) you can paste into Google Merchant Center, Meta Commerce Manager, or similar platforms.
It is designed like:
- opcodesio/log-viewer — ships its own admin UI at a package route (no UI to build per project)
- Laravel Fortify — headless contracts (
ProductRepository,Feedify::auth()) so you plug in your catalog and access rules
Works with Bagisto, Lunar, custom e‑commerce, or a simple product table via the repository contract.
What you get
| Area | Details |
|---|---|
| Admin UI | Manage feeds, make feed, mappings, settings, status — at /feedify |
| API | JSON API under /feedify/api/* for generation and CRUD |
| Formats | XML (RSS/g: for Google & Meta), CSV, TSV, TXT, JSON |
| Catalog | Default feedify_products table or your own ProductRepository |
| Scale | Batch generation + optional scheduled refresh via Laravel queue/scheduler |
| Compliance | Meta catalog field formats (in stock, 19.99 USD, g: XML tags) |
Who it’s for
- Laravel store owners who need Google Merchant Center / Meta catalog feeds
- Developers who want one reusable feed package across many Laravel projects
- Teams that need a publishable feed URL for shopping platforms
Features
- Built-in admin UI at
/feedify— Log Viewer style; publish assets once, use everywhere - No host-app frontend — developers don’t rebuild feed UI per project
- Fortify-style extension —
Feedify::auth()andFeedify::useProductRepository() - Works with any catalog — implement
ProductRepository+ map toProductDto - Multi-merchant templates — Google, Facebook/Meta, Pinterest, TikTok, Custom
- Multiple export formats — XML, CSV, TSV, TXT, JSON (Meta: XML/CSV/TSV/TXT)
- Batch + queue generation — large catalogs via per-batch processing and
GenerateFeedJob - Scheduled auto-refresh — enable feed status; Laravel scheduler regenerates feeds
- Mappings — attribute, category, dynamic attributes, and option mappings
- Public feed URLs —
/feeds/{provider}/{type}/{filename}for merchant platforms - Meta catalog compliant — RSS +
g:namespace, spaced availability, ISO price format - REST generation API — save config → get product IDs → batch generate → save file
- Events —
FeedGenerating,FeedGenerated,FeedFailedfor hooks (CDN, notify, upload) - Laravel 10–12 — auto-discovered service provider
Requirements
| PHP | 8.2+ |
| Laravel | 10, 11, or 12 |
| Database | MySQL, PostgreSQL, SQLite, etc. |
Installation
composer require shahariar-ahmad/feedify
Publish config and assets, run migrations:
php artisan feedify:publish php artisan migrate
Optional — seed sample products for testing:
php artisan feedify:seed-products
Open the admin UI:
https://your-app.test/feedify
Laravel auto-discovers
FeedifyServiceProvider. No manual registration needed.
Quick start
1. Protect the admin UI (production)
In App\Providers\AppServiceProvider::boot:
use Feedify\Facades\Feedify; Feedify::auth(fn ($request) => $request->user()?->can('manage-feeds'));
2. Create a feed
- Visit
/feedify - Go to Make Feed
- Choose merchant (e.g. Google or Facebook)
- Choose format (XML recommended)
- Click Save & generate
3. Use the feed URL
Generated files are available at:
/feeds/{provider}/{type}/{filename}.{ext}
Example:
https://your-app.test/feeds/google/xml/google_feed.xml
Paste this URL into Google Merchant Center or Meta Commerce Manager.
Connect your product catalog
By default Feedify uses the feedify_products table. For a real store, bind your own repository:
use Feedify\Facades\Feedify; Feedify::useProductRepository(\App\Feedify\MyCatalogRepository::class);
Implement Feedify\Contracts\ProductRepository and map your models to Feedify\DTO\ProductDto.
→ Full guide: docs/custom-catalog.md
Configuration
Publish config:
php artisan vendor:publish --tag=feedify-config
Common environment variables:
| Variable | Default | Description |
|---|---|---|
FEEDIFY_PATH |
feedify |
Admin UI + API base path |
FEEDIFY_DISK |
local |
Storage disk for feed files |
FEEDIFY_PER_BATCH |
200 |
Products per generation batch |
FEEDIFY_SCHEDULE_INTERVAL |
86400 |
Auto-refresh interval (seconds) |
→ Full reference: docs/configuration.md
Artisan commands
| Command | Description |
|---|---|
php artisan feedify:publish |
Publish config + UI assets |
php artisan feedify:seed-products |
Insert sample products |
php artisan feedify:generate |
Generate all feeds |
php artisan feedify:generate {slug} --sync |
Generate one feed synchronously |
php artisan feedify:generate --scheduled |
Generate feeds with scheduling enabled |
Ensure Laravel scheduler is running in production:
* * * * * cd /path-to-app && php artisan schedule:run >> /dev/null 2>&1
Supported merchants
| Merchant | Key | Formats |
|---|---|---|
| Google Shopping | google |
XML, CSV, TSV, TXT, JSON |
| Facebook / Meta | facebook |
XML, CSV, TSV, TXT |
pinterest |
XML, CSV, TSV, TXT, JSON | |
| TikTok | tiktok |
XML, CSV, TSV, TXT, JSON |
| Custom | custom |
XML, CSV, TSV, TXT, JSON |
→ Field specs & Meta notes: docs/merchants.md
Events
Hook into feed lifecycle:
use Feedify\Events\FeedGenerated; use Feedify\Events\FeedGenerating; use Feedify\Events\FeedFailed; Event::listen(FeedGenerated::class, function ($event) { // Notify, upload to CDN, etc. });
| Event | Fired when |
|---|---|
FeedGenerating |
Full generation starts |
FeedGenerated |
File written successfully |
FeedFailed |
Generation throws an exception |
Documentation
| Document | Contents |
|---|---|
| Installation | Path repo, publish tags, production checklist |
| Configuration | All config keys, env vars, publish tags |
| API reference | REST endpoints (/feedify/api/*) |
| Architecture | Pipeline, database, package layout |
| Custom catalog | ProductRepository + ProductDto |
| Merchants | Google, Meta, Pinterest, TikTok specs |
| Troubleshooting | Common errors and fixes |
| Changelog | Release history |
Testing
composer install
composer test
The test suite covers feed generation, API pipeline, Meta catalog compliance, auth, and repository filters.
License
The MIT License (MIT). See LICENSE.