PHPackages                             sashalenz/ebay-mip - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. sashalenz/ebay-mip

ActiveLibrary[API Development](/categories/api)

sashalenz/ebay-mip
==================

Laravel package for eBay Merchant Integration Platform (MIP) - Feed Generators, SFTP Automation, and Bulk Inventory Management

1.1.0(1mo ago)180MITPHPPHP ^8.4|^8.5

Since Oct 14Pushed 1mo agoCompare

[ Source](https://github.com/sashalenz/ebay-mip)[ Packagist](https://packagist.org/packages/sashalenz/ebay-mip)[ Docs](https://github.com/sashalenz/ebay-mip)[ RSS](/packages/sashalenz-ebay-mip/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (3)Dependencies (16)Versions (4)Used By (0)

eBay MIP Feed Generator for Laravel
===================================

[](#ebay-mip-feed-generator-for-laravel)

[![Latest Version on Packagist](https://camo.githubusercontent.com/2f79376e85c54158336ed85f8b9eb7dc03c693c0f00e7e30c8c4aebb76467960/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f73617368616c656e7a2f656261792d6d69702e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/sashalenz/ebay-mip)[![Total Downloads](https://camo.githubusercontent.com/f47cdb5ce81aa489952282a37ca2507480234e6a4f4cea651a12c618e61b467b/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f73617368616c656e7a2f656261792d6d69702e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/sashalenz/ebay-mip)

A modern Laravel package for eBay Merchant Integration Platform (MIP). Generate feed files (CSV/XML), automate SFTP uploads, and manage bulk inventory operations with ease.

Features
--------

[](#features)

- 🚀 Built for Laravel 12+ and PHP 8.4+
- 📦 **6 Feed Types**: Product, Distribution, Availability, Fulfillment, Order Report, Combined
- 📝 **Dual Format Support**: CSV and XML
- ✅ **Full eBay Validation**: Enforce MIP rules before generation
- 🏗️ **Fluent Builder API**: Clean, readable feed construction
- 📤 **SFTP Automation**: Automatic uploads via Laravel Scheduler
- 🔄 **Retry Logic**: 3 attempts with exponential backoff
- 📊 **Upload Tracking**: Database history of all feed uploads
- 🎪 **Laravel Events**: Listen to feed lifecycle events
- ⚡ **Performance**: Upload 50,000+ SKUs in 30 minutes
- 🔐 **Type-Safe**: Spatie Laravel Data objects

What is MIP?
------------

[](#what-is-mip)

The Merchant Integration Platform (MIP) is eBay's feed-based bulk upload system for enterprise sellers. Instead of making thousands of API calls, you upload CSV/XML feed files via SFTP, and eBay processes them efficiently.

**MIP Benefits:**

- Upload 50,000+ SKUs in 30 minutes
- Industry-standard CSV/XML formats
- Multi-marketplace with one account
- Automatic daily inventory reports
- Perfect for large catalogs

Installation
------------

[](#installation)

Install via composer:

```
composer require sashalenz/ebay-mip
```

Publish configuration and migrations:

```
php artisan vendor:publish --tag="ebay-mip-config"
php artisan vendor:publish --tag="ebay-mip-migrations"
php artisan migrate
```

Configuration
-------------

[](#configuration)

Configure SFTP credentials in `.env`:

```
# MIP SFTP Connection
MIP_SFTP_HOST=sftp.mip.ebay.com
MIP_SFTP_USERNAME=your-mip-username
MIP_SFTP_PASSWORD=your-mip-password
MIP_SFTP_PORT=22

# Automatic Upload (Optional)
MIP_UPLOAD_ENABLED=true
MIP_UPLOAD_MODE=sftp
MIP_UPLOAD_SCHEDULE="0 2 * * *"

# Feed Storage
MIP_FEEDS_PATH=storage/mip/feeds
MIP_FEEDS_COMPRESSION=true
MIP_FEEDS_RETENTION_DAYS=30

# Validation
MIP_VALIDATION_STRICT=true
MIP_VALIDATION_THROW=true
```

Quick Start
-----------

[](#quick-start)

### Generate Product Feed (CSV)

[](#generate-product-feed-csv)

```
use Sashalenz\EbayMip\Builders\ProductFeedBuilder;
use Sashalenz\EbayMip\Data\Product\ProductData;
use Sashalenz\EbayMip\Enums\FeedFormat;

$feed = ProductFeedBuilder::make()
    ->format(FeedFormat::CSV)
    ->addProducts(
        Product::all()->map(fn($p) => ProductData::from([
            'sku' => $p->sku,
            'title' => $p->name,
            'description' => $p->description,
            'price' => $p->price,
            'quantity' => $p->stock,
            'categoryId' => $p->ebay_category_id,
            'images' => $p->images,
        ]))
    )
    ->validate() // Validates against eBay rules
    ->save(); // Saves to storage/mip/feeds/

echo "Feed saved: {$feed}";
```

### Upload to SFTP

[](#upload-to-sftp)

```
use Sashalenz\EbayMip\Upload\SftpUploader;

$uploader = app(SftpUploader::class);
$uploader->upload(
    storage_path('mip/feeds/product_20251014.csv'),
    '/inbound/product.csv'
);
```

### Automatic Upload via Scheduler

[](#automatic-upload-via-scheduler)

Enable automatic uploads in `.env`:

```
MIP_UPLOAD_ENABLED=true
MIP_UPLOAD_SCHEDULE="0 2 * * *"
```

Feeds will be automatically uploaded daily at 2 AM. Or trigger manually:

```
php artisan mip:upload-feeds
```

Available Feed Types
--------------------

[](#available-feed-types)

### 1. Product Feed

[](#1-product-feed)

Upload new products or update existing listings:

```
use Sashalenz\EbayMip\Builders\ProductFeedBuilder;

ProductFeedBuilder::make()
    ->format(FeedFormat::CSV) // or FeedFormat::XML
    ->addProduct(ProductData::from([
        'sku' => 'PROD-001',
        'title' => 'Vintage Camera',
        'description' => 'Classic 35mm film camera...',
        'price' => '99.99',
        'quantity' => 10,
        'categoryId' => '625',
        'images' => [
            'https://example.com/img1.jpg',
            'https://example.com/img2.jpg',
        ],
        'itemSpecifics' => [
            'Brand' => 'Canon',
            'Model' => 'AE-1',
            'Condition' => 'Used',
        ],
    ]))
    ->save()
    ->upload(); // Optional: upload immediately
```

### 2. Availability Feed

[](#2-availability-feed)

Update inventory quantities:

```
use Sashalenz\EbayMip\Builders\AvailabilityFeedBuilder;

AvailabilityFeedBuilder::make()
    ->format(FeedFormat::CSV)
    ->addAvailability(AvailabilityData::from([
        'sku' => 'PROD-001',
        'quantity' => 5,
    ]))
    ->save();
```

### 3. Fulfillment Feed

[](#3-fulfillment-feed)

Upload shipping/tracking information:

```
use Sashalenz\EbayMip\Builders\FulfillmentFeedBuilder;

FulfillmentFeedBuilder::make()
    ->format(FeedFormat::CSV)
    ->addFulfillment(FulfillmentData::from([
        'orderId' => '12-34567-89012',
        'trackingNumber' => '1Z999AA10123456784',
        'carrier' => 'UPS',
        'shipDate' => '2025-10-14',
    ]))
    ->save();
```

### 4. Distribution Feed

[](#4-distribution-feed)

Multi-location inventory:

```
DistributionFeedBuilder::make()
    ->addDistribution(DistributionData::from([
        'sku' => 'PROD-001',
        'locationId' => 'WAREHOUSE_01',
        'quantity' => 100,
    ]))
    ->save();
```

### 5. Combined Feed

[](#5-combined-feed)

Most efficient - all inventory data in one feed:

```
CombinedFeedBuilder::make()
    ->addProduct($productData)
    ->addDistribution($distributionData)
    ->addAvailability($availabilityData)
    ->save();
```

### 6. Order Report Feed

[](#6-order-report-feed)

Download orders from MIP:

```
php artisan mip:download:orders
```

Validation Rules
----------------

[](#validation-rules)

The package enforces eBay MIP validation rules:

- **Title**: Max 80 characters, no HTML tags
- **Description**: Max 500,000 characters
- **Price**: Positive decimal with 2 decimal places
- **Images**: HTTPS only, max 12 images, valid URLs
- **SKU**: Max 50 characters, alphanumeric
- **Quantity**: Non-negative integer
- **Category**: Valid eBay category ID

Artisan Commands
----------------

[](#artisan-commands)

### Generate Product Feed

[](#generate-product-feed)

```
php artisan mip:generate:product --format=csv
```

### Upload Feeds

[](#upload-feeds)

```
php artisan mip:upload-feeds
```

### Download Order Reports

[](#download-order-reports)

```
php artisan mip:download:orders
```

### Test SFTP Connection

[](#test-sftp-connection)

```
php artisan mip:test-connection
```

Laravel Events
--------------

[](#laravel-events)

Listen to feed lifecycle events in your `EventServiceProvider`:

```
use Sashalenz\EbayMip\Events\FeedGeneratedEvent;
use Sashalenz\EbayMip\Events\FeedUploadedEvent;
use Sashalenz\EbayMip\Events\FeedUploadFailedEvent;

protected $listen = [
    FeedGeneratedEvent::class => [
        NotifyAdminFeedGenerated::class,
    ],
    FeedUploadedEvent::class => [
        LogFeedUpload::class,
        NotifySuccess::class,
    ],
    FeedUploadFailedEvent::class => [
        AlertAdminUploadFailed::class,
        RetryUpload::class,
    ],
];
```

Upload History
--------------

[](#upload-history)

Query upload history:

```
use Sashalenz\EbayMip\Models\MipFeedUpload;

// Get recent uploads
$uploads = MipFeedUpload::orderBy('created_at', 'desc')->limit(10)->get();

// Get failed uploads
$failed = MipFeedUpload::failed()->get();

// Get uploads by feed type
$productUploads = MipFeedUpload::where('feed_type', 'product')->get();
```

Manual vs Automatic Mode
------------------------

[](#manual-vs-automatic-mode)

### Automatic Mode (Recommended)

[](#automatic-mode-recommended)

```
MIP_UPLOAD_ENABLED=true
MIP_UPLOAD_MODE=sftp
```

Feeds are automatically uploaded via Laravel Scheduler.

### Manual Mode

[](#manual-mode)

```
MIP_UPLOAD_MODE=manual
```

Generate feeds locally, upload manually when ready:

```
$feed = ProductFeedBuilder::make()->save();
// Upload manually via SFTP client or MIP GUI
```

Response File Parsing
---------------------

[](#response-file-parsing)

Parse MIP response files to check for errors:

```
use Sashalenz\EbayMip\Parsers\ResponseFileParser;

$parser = app(ResponseFileParser::class);
$response = $parser->parse(storage_path('mip/responses/product_response.csv'));

echo "Total: {$response->totalRecords}\n";
echo "Success: {$response->successRecords}\n";
echo "Errors: {$response->errorRecords}\n";

foreach ($response->errors as $sku => $error) {
    echo "SKU {$sku}: {$error}\n";
}
```

Testing
-------

[](#testing)

```
composer test
```

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

Contributing
------------

[](#contributing)

Contributions are welcome! Please feel free to submit a Pull Request.

Security Vulnerabilities
------------------------

[](#security-vulnerabilities)

If you discover a security vulnerability, please send an email to .

Credits
-------

[](#credits)

- [Oleksandr Petrovskyi](https://github.com/sashalenz)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

44

—

FairBetter than 90% of packages

Maintenance91

Actively maintained with recent releases

Popularity12

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity55

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~108 days

Total

3

Last Release

44d ago

PHP version history (2 changes)1.0.0PHP ^8.4

1.1.0PHP ^8.4|^8.5

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/13202688?v=4)[Oleksandr Petrovskyi](/maintainers/sashalenz)[@sashalenz](https://github.com/sashalenz)

---

Top Contributors

[![sashalenz](https://avatars.githubusercontent.com/u/13202688?v=4)](https://github.com/sashalenz "sashalenz (3 commits)")

---

Tags

laravelsftpebaybulk uploadfeed-generatorinventory-managementmipmerchant-integration-platform

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/sashalenz-ebay-mip/health.svg)

```
[![Health](https://phpackages.com/badges/sashalenz-ebay-mip/health.svg)](https://phpackages.com/packages/sashalenz-ebay-mip)
```

###  Alternatives

[dedoc/scramble

Automatic generation of API documentation for Laravel applications.

2.1k11.2M97](/packages/dedoc-scramble)[spatie/laravel-pdf

Create PDFs in Laravel apps

1.0k4.8M46](/packages/spatie-laravel-pdf)[rawilk/profile-filament-plugin

Profile &amp; MFA starter kit for filament.

3914.6k](/packages/rawilk-profile-filament-plugin)[danestves/laravel-polar

A package to easily integrate your Laravel application with Polar.sh

8120.4k](/packages/danestves-laravel-polar)[lettermint/lettermint-laravel

Official Lettermint driver for Laravel

1190.2k1](/packages/lettermint-lettermint-laravel)[tarfin-labs/event-machine

Event-driven state machines for Laravel with event sourcing, type-safe context, and full audit trail.

199.4k](/packages/tarfin-labs-event-machine)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
