Open this in Magpie

Companies has Import JSON in its page bar. It adds a new company from a JSON document, with everything you list: its details, officers, share classes, holders, every issue and transfer of shares, SAFEs and notes, option plans with their grants, contracts and filings. Use it to bring in records you keep in a spreadsheet or another app: give the export to an assistant with Copy the prompt, paste its answer into the box, and choose Preview.

The preview lists every record the import would make and every problem it found, such as a transfer from a holder who has too few shares on that date, a share class that is not in the document, or a date written the wrong way. Nothing is saved until there are no problems and you choose Import.

Importing always makes a new company. It never adds to or changes a company you already keep.

Shares are recorded in date order, whatever order the document lists them in, and each issue gets the next certificate number of its class unless the document gives one.

The document

{
  "company": {
    "legalName": "Example Robotics Ltd",
    "entityKind": "private_limited",
    "country": "GB",
    "registrationNumber": "01234567",
    "incorporatedOn": "2024-01-10",
    "financialYearEnd": "03-31",
    "currency": "GBP"
  },
  "officers": [
    { "name": "Jane Doe", "role": "director", "appointedOn": "2024-01-10" }
  ],
  "shareClasses": [
    { "name": "Ordinary", "parValue": "0.0001" }
  ],
  "holders": [
    { "name": "Jane Doe" },
    { "name": "Example Ventures LP", "kind": "entity" }
  ],
  "transactions": [
    { "kind": "issue", "date": "2024-01-10", "class": "Ordinary", "to": "Jane Doe", "shares": "6000000", "pricePerShare": "0.0001" },
    { "kind": "transfer", "date": "2025-06-01", "class": "Ordinary", "from": "Jane Doe", "to": "Sam Sample", "shares": "500000" }
  ],
  "convertibles": [
    { "kind": "safe_post_money", "holder": "Example Ventures LP", "amount": "250000", "date": "2025-09-01", "valuationCap": "10000000" }
  ],
  "optionPlans": [
    {
      "name": "2025 Share Option Plan", "class": "Ordinary", "pool": "1000000", "adoptedOn": "2025-02-01",
      "grants": [
        { "holder": "Sam Sample", "options": "48000", "exercisePrice": "0.10", "grantedOn": "2025-03-01", "cliffMonths": 12, "vestingMonths": 48,
          "exercises": [ { "date": "2026-04-01", "options": "12000" } ] }
      ]
    }
  ],
  "contracts": [
    { "title": "Office lease", "counterparty": "Example Properties Ltd", "kind": "lease",
      "terms": [ { "startsOn": "2025-01-01", "endsOn": "2027-12-31", "noticeDays": 90, "value": "1500", "per": "month" } ] }
  ],
  "filings": [
    { "name": "Confirmation statement", "authority": "Companies House", "dueOn": "2027-01-24", "rule": "after_incorporation_anniversary", "days": 14 }
  ]
}

company is required, with at least its legalName. Every other part is optional. Dates are written YYYY-MM-DD. Numbers of shares, amounts and prices may be written as text or as numbers; amounts are in the company's currency.

The company

Field Notes
legalName Required. The name as registered.
entityKind sole_trader, partnership, private_limited, public_limited, llc, corporation, nonprofit or other.
country Two letters, such as GB or US.
region A state or province.
registrationNumber
incorporatedOn A date.
financialYearEnd The month and day, written MM-DD, such as 03-31.
currency Three letters, such as GBP or USD.
registeredAddress, businessAddress One line of the address per line of text.
website, notes

Officers

Each has name, role (director, secretary, president, chief_executive, treasurer, registered_agent or other; director when left out), an optional title, appointedOn (required) and, for one who has left, resignedOn.

Share classes and holders

A class has name, kind (common or preferred), parValue, authorisedShares and certificatePrefix, all but name optional.

A holder has name, kind (person or entity) and email. A name used in a transaction, a SAFE or a grant that is not listed here is added as a person.

Transactions

Each has kind (issue, transfer, repurchase or cancellation), date, class (the name of one of shareClasses), shares, and to for an issue or a transfer, from for everything but an issue. pricePerShare, certificate and note are optional.

SAFEs and notes

Each has kind (safe_post_money, safe_pre_money or convertible_note), holder, amount, date, and optionally valuationCap, discountPercent, interestPercent, maturesOn (required for a note), mfn and proRata (true or false).

Option plans and grants

A plan has name, class, pool (the shares set aside), adoptedOn and grants. A grant has holder, options, grantedOn, and optionally exercisePrice, vestingStartsOn (the grant date when left out), cliffMonths, vestingMonths, frequency (monthly, quarterly or yearly), expiresOn and exercises, each a date and a number of options. An exercise is recorded as an issue of shares from the pool.

Contracts

Each has title, counterparty, kind (customer, supplier, lease, employment, insurance, subscription, loan, confidentiality, partnership or other), optional keyTerms and reviewOn, and terms, at least one, oldest first. A term has startsOn, and optionally endsOn, autoRenews (true or false), renewalMonths, noticeDays, value and per (one_off, month, quarter or year).

Filings and renewals

Each has name, dueOn (the next due date), and optionally kind (filing, tax, licence, insurance, registration, permit, membership, domain or other), authority, and rule with months and days:

Rule Next date
none Once only.
yearly_same_day The same day each year.
every_n_months Every months months.
after_fye months and days after each financial year end.
after_incorporation_anniversary months and days after each anniversary of incorporation.
after_completion months and days after the last one is done.

These rules are how Magpie works out the next date; they are not advice about when a filing is due. Check each date with the authority.

If an import is refused for a reason you can't work out, Contact support.

Ask Magpie support

Send Magpie staff a question about anything this article does not answer.