npm package: @stigg/bulk-import
Description: CLI tool to bulk import customers to Stigg
Latest version: 1.10.1

# Bulk import customers to Stigg

<img src="docs/images/StiggIcon.svg" width="50" alt="Stigg Logo" style="">

After creating your product catalog in [Stigg](https://stigg.io), you can import your existing customers into Stigg.

This tool will manage the import process:

- It reads the list of customers to import from a `JSON` file.
- It's idempotent - feel safe to re-run it.

## Usage

### Prepare input json files

The CLI support import data of customers, subscriptions and feature usage into Stigg.

#### Import customers

Create a file `customers.json` that contains all the customers.

The file should be in the following schema:

```json5
{
  "customers": [
    {
      "customerId": "lorem-ipsum",
      "email": "lorem@ipsum.com", // optional
      "name": "Lorem-ipsum", // optional
      "billingId": "cus_MvdQq1bVD1BQHe", // optional - if an existing customer in Stripe
      "paymentMethodId": "pm_1N04AHEdaKWoSZ0OgP78RflV", // required for paid customers
      "updatedAt": "2022-01-01T00:00:00.000Z", // optional - indicates the last update of the customer. In case there's already existing customer that was updated after that date, it will skip import this customer
      "metadata": {
        // optional - set metadata for the customer
        "isTest": "true",
      },
    },
    // ...
  ],
}
```

#### Import subscriptions

Create a file `subscriptions.json` that contains all the subscriptions.

```json5
{
  "subscriptions": [
    {
      "customerId": "lorem-ipsum",
      "planId": "plan-1",
      "resourceId": "site-1", // optional - required for multiple subscriptions product
      "billingPeriod": "MONTHLY", // optional - required for paid plan
      "startDate": "2022-01-01T00:00:00.000Z", // optional - used for backdating
      "endDate": "2022-01-01T00:00:00.000Z", // optional - end date for the subscription
      "updatedAt": "2022-01-01T00:00:00.000Z", // optional - indicates the last update of the subscription. In case there's already existing subscription that was updated after that date, it will skip import this subscription
      "unitQuantity": 5, // optional - required for per-unit paid plan (single chargeable feature)
      "billableFeatures": [ // optional - required for per-unit paid plan (multiple chargeable features)
        { "featureId": "feature-seats", "quantity": 5 },
        { "featureId": "feature-projects", "quantity": 25 },
      ],
      "addons": [ // optional - set subscription addons
        { "addonId": "addon-1", "quantity": 6 },
        { "addonId": "addon-2", "quantity": 3 },
      ],
      "metadata": { // optional - set metadata for the subscription
        "isTest": "true"
      }
    },
    // ...
  ]
}
```

#### Import feature usage

Create a file `usage.json` that contains all the features' up-to-date usage.

```json5
{
  "usages": [
    {
      "customerId": "lorem-ipsum",
      "resourceId": "site-1", // optional - required for multiple subscriptions product
      "featureId": "feature-seats",
      "usage": 5
    }
    // ...
  ]
}
```

### Execute bulk import

- Obtain Server API key from https://app.stigg.io/account/settings
- Export it as environment variable:
  ```
  export STIGG_SERVER_API_KEY='<SERVER-API-KEY>'
  ```
- Initiate the bulk import process (you can either import all at once or do it separately):
  ```
  npx @stigg/bulk-import --customers-file customers.json --subscriptions-file subscriptions.json --usage-file usage.json
  ```
- During the import process there will be a progress bar.
- At the end of the process a summary will be displayed.