Bulk import of existing customers and subscriptions

Import your existing customer base to Stigg using a dedicated tool or via our API

Usage

Prerequisites

Preparing the 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:

{
  "customers": [
    {
      "customerId": "lorem-ipsum",
      "email": "[email protected]", // 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.

The file should be in the following schema:

{
  "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.

The file should be in the following schema:

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

πŸ“˜

Please note that the import function is idempotent, hence will consistently yield the same result each time it is executed.

Initiating the bulk import process

Obtain a Server API key from the Stigg Console.

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.

When the import process is complete a summary will be displayed.

Import using the API

You can also use our API to bulk import subscriptions and customers programmatically:

Import customers

Query

mutation CustomerBulkImport($input: ImportCustomerBulk!) {
  importCustomersBulk(input: $input) {  
    customers {
      {
        customerId
        email
        name
        billingId
        paymentMethodId
        additionalMetaData
        }
      }
    }
  }

Variables

{
  "input": {
    "customers": {
      {
        "customerId": "lorem-ipsum",
        "email": "[email protected]", // optional
        "name": "Lorem-ipsum", // optional
        "billingId": "cus_MvdQq1bVD1BQHe", // optional
        "paymentMethodId": "pm_1N04AHEdaKWoSZ0OgP78RflV", // optional
        "additionalMetaData": {
          "isTest": "true" // optional
        }
      }
    }
  }
}

Import subscriptions

Query

mutation SubscriptionBulkImport($input: ImportSubscriptionsBulk!) {
  importSubscriptionsBulk(input: $input) {  
  subscriptions {
    {
      customerId
      planId
      resourceId
      billingPeriod
      unitQuantity
      startDate
      additionalMetaData
        }
      }
    }
  }

Variables

{
  "input": {
  "subscriptions": {
    {
      "customerId": "lorem-ipsum",
      "planId": "plan-local-env-p-1",
      "resourceId": "site-1", // optional
      "billingPeriod": "MONTHLY", // optional
      "unitQuantity": 5, // optional
      "startDate": "2022-01-01T00:00:00.000Z", // optional
      "additionalMetaData": {
        "isTest": "true" // optional
        }
      }
    }
  }
}

πŸ“˜

This functionality is also accessible via the Node.js SDK using the ImportCustomerBulk and ImportSubscriptionBulk methods.