Bulk import of existing customers and subscriptions
Import your existing customer base to Stigg using a dedicated tool or via our API
Usage
Prerequisites
- NodeJS must be installed
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.
Updated 6 months ago