Skip to content

Search products, tools, founders, niches and guides.

Developers

Shipfolio REST API

Read your own listings and stacks from scripts, dashboards or your own site. JSON over HTTPS, with an API key from Company Pro.

Authentication

Send your API key as a Bearer token on every request. Keys are part of Company Pro.

Create a key under Settings, API keys. It's shown once, so store it right away. A key belongs to you and works while you're on a company with Company Pro; it stops working if you leave the plan or your account is suspended.

Keep keys on a server or in an environment variable. Anyone with your key can read your private listings. Revoke a key in Settings and make a new one if it leaks.

Header
Authorization: Bearer sfk_…
Terminal
export SHIPFOLIO_API_KEY="sfk_…"

Base URL and format

  • Requests are GET over HTTPS. Responses are JSON with camelCase field names.
  • Money is an integer number of cents with an ISO 4217 currency: { "cents": 284000, "currency": "USD" }.
  • Timestamps are ISO 8601 in UTC; calendar days are yyyy-MM-dd. Fields without a value are left out or null.
  • Enums are strings, like Published or Verified. New values can appear, so handle ones you don't know.

Endpoints

The API reads. To change a listing from code or an assistant, use the MCP server with a write key.

GET /listings

List your listings

Every listing you manage across your companies, drafts and private ones included, with status, completeness, verified revenue and launch.

Request
curl https://api.shipfolio.io/api/v1/listings \
  -H "Authorization: Bearer $SHIPFOLIO_API_KEY"
200 response · ListingOwnerRow[]
[
  {
    "id": "0b8f5d2e-6c1a-4f3e-9a51-2d7e4c9b1a06",
    "slug": "trackwise",
    "name": "Trackwise",
    "tagline": "Time tracking that fills in your timesheet for you",
    "logoUrl": "https://shipfolio.io/media/trackwise/logo.png",
    "status": "Published",
    "visibility": "Public",
    "stackCount": 7,
    "completenessScore": 86,
    "revenue": {
      "mrr": {
        "cents": 284000,
        "currency": "USD"
      },
      "tier": "Verified",
      "capturedOn": "2026-11-14",
      "customerCount": 213,
      "stripeConnected": true,
      "history": [
        {
          "capturedOn": "2026-10-14",
          "mrrCents": 251500,
          "tier": "Verified"
        },
        {
          "capturedOn": "2026-11-14",
          "mrrCents": 284000,
          "tier": "Verified"
        }
      ],
      "verifiedBy": [
        "Stripe"
      ],
      "stripeKind": "StripeApp"
    },
    "launch": {
      "status": "Ended",
      "launchDate": "2026-09-23",
      "voteCount": 148
    },
    "updatedAt": "2026-11-14T09:12:44Z",
    "companyId": "5a3c1e90-2b7d-4c8f-8e16-9f0d3b6a2c71",
    "companyName": "Trackwise Labs"
  },
  {
    "id": "c41a7e3b-9d20-4b6f-a8c5-1e6f0d9b7a32",
    "slug": "invoicely-ai",
    "name": "Invoicely AI",
    "tagline": "Turns tracked hours into invoices",
    "logoUrl": null,
    "status": "Draft",
    "visibility": "Private",
    "stackCount": 3,
    "completenessScore": 41,
    "updatedAt": "2026-11-10T16:03:10Z",
    "companyId": "5a3c1e90-2b7d-4c8f-8e16-9f0d3b6a2c71",
    "companyName": "Trackwise Labs"
  }
]

GET /listings/{slug}

Get one listing

Everything you can edit on one listing: copy, links, tags, completeness and its gaps, revenue history, launch and the company's plan.

Request
curl https://api.shipfolio.io/api/v1/listings/trackwise \
  -H "Authorization: Bearer $SHIPFOLIO_API_KEY"
200 response · ListingOwnerView
{
  "id": "0b8f5d2e-6c1a-4f3e-9a51-2d7e4c9b1a06",
  "slug": "trackwise",
  "name": "Trackwise",
  "tagline": "Time tracking that fills in your timesheet for you",
  "problemStatement": "Freelancers lose billable hours because they forget to start a timer.",
  "description": "Trackwise watches the apps you work in and drafts your timesheet at the end of the day. You approve it in one click.",
  "pricingModel": "Freemium",
  "priceFrom": {
    "cents": 900,
    "currency": "USD"
  },
  "launchDate": "2026-09-23",
  "customerCount": 213,
  "websiteUrl": "https://trackwise.io",
  "githubRepo": "trackwise/desktop",
  "xUrl": "https://x.com/trackwiseapp",
  "nicheTags": [
    "time-tracking",
    "freelancers"
  ],
  "audienceTags": [
    "freelancers",
    "agencies"
  ],
  "alternativeTo": [
    "toggl",
    "harvest"
  ],
  "visibility": "Public",
  "status": "Published",
  "githubStars": 1204,
  "logoUrl": "https://shipfolio.io/media/trackwise/logo.png",
  "publishedAt": "2026-08-02T14:20:00Z",
  "updatedAt": "2026-11-14T09:12:44Z",
  "stackCount": 7,
  "completeness": {
    "score": 86,
    "gaps": [
      {
        "field": "shipLog",
        "label": "Log what you shipped",
        "cluster": "trackwise changelog",
        "pages": [
          "/p/trackwise/changelog"
        ],
        "weight": 6
      }
    ]
  },
  "revenue": {
    "mrr": {
      "cents": 284000,
      "currency": "USD"
    },
    "tier": "Verified",
    "capturedOn": "2026-11-14",
    "customerCount": 213,
    "stripeConnected": true,
    "history": [
      {
        "capturedOn": "2026-10-14",
        "mrrCents": 251500,
        "tier": "Verified"
      },
      {
        "capturedOn": "2026-11-14",
        "mrrCents": 284000,
        "tier": "Verified"
      }
    ],
    "verifiedBy": [
      "Stripe"
    ],
    "stripeKind": "StripeApp"
  },
  "launch": {
    "id": "7e2d9c14-3a8b-4f51-b6e0-c9a1d2f3e485",
    "launchDate": "2026-09-23",
    "status": "Ended",
    "seoTitle": "Trackwise: time tracking that fills in your timesheet",
    "seoDescription": "Trackwise drafts your timesheet from the apps you work in.",
    "voteCount": 148,
    "external": []
  },
  "company": {
    "slug": "trackwise-labs",
    "name": "Trackwise Labs",
    "isStudio": false,
    "kind": "Product"
  },
  "pro": {
    "active": true,
    "companyName": "Trackwise Labs",
    "canUpgrade": false,
    "companyId": "5a3c1e90-2b7d-4c8f-8e16-9f0d3b6a2c71"
  }
}

GET /listings/{slug}/stack

Get a listing's stack

The tools in the order you set, with your notes and monthly costs where you added them, and the monthly total.

Request
curl https://api.shipfolio.io/api/v1/listings/trackwise/stack \
  -H "Authorization: Bearer $SHIPFOLIO_API_KEY"
200 response · StackView
{
  "items": [
    {
      "id": "a1f0c3d2-4b5e-4a6f-8c7d-9e0f1a2b3c4d",
      "tool": {
        "slug": "nextjs",
        "name": "Next.js",
        "category": "Frontend",
        "logoUrl": "https://shipfolio.io/media/tools/nextjs.svg",
        "website": "https://nextjs.org",
        "hasAffiliate": false,
        "listingCount": 912
      },
      "category": "Frontend",
      "position": 0
    },
    {
      "id": "b2e1d4c3-5a6f-4b7e-9d8c-0f1e2d3c4b5a",
      "tool": {
        "slug": "supabase",
        "name": "Supabase",
        "category": "Database",
        "logoUrl": "https://shipfolio.io/media/tools/supabase.svg",
        "website": "https://supabase.com",
        "hasAffiliate": false,
        "listingCount": 604
      },
      "category": "Database",
      "note": "Postgres and auth",
      "monthlyCost": {
        "cents": 2500,
        "currency": "USD"
      },
      "position": 1
    },
    {
      "id": "c3d2e5f4-6b7a-4c8d-ae9f-1a2b3c4d5e6f",
      "tool": {
        "slug": "stripe",
        "name": "Stripe",
        "category": "Payments",
        "logoUrl": "https://shipfolio.io/media/tools/stripe.svg",
        "website": "https://stripe.com",
        "hasAffiliate": false,
        "listingCount": 1188
      },
      "category": "Payments",
      "position": 2
    },
    {
      "id": "d4c3f6e5-7c8b-4d9e-bf0a-2b3c4d5e6f7a",
      "tool": {
        "slug": "vercel",
        "name": "Vercel",
        "category": "Hosting",
        "logoUrl": "https://shipfolio.io/media/tools/vercel.svg",
        "website": "https://vercel.com",
        "hasAffiliate": false,
        "listingCount": 840
      },
      "category": "Hosting",
      "monthlyCost": {
        "cents": 2000,
        "currency": "USD"
      },
      "position": 3
    }
  ],
  "monthlyTotal": {
    "cents": 4500,
    "currency": "USD"
  },
  "stackHash": "9c1f4e7a2b"
}

Errors

Failures are RFC 9457 problem details: a status, a title and a detail you can show or log.

Error statuses
Status When
401 The key is missing, invalid or revoked. Also when its owner is no longer on a company with Company Pro, or the account is suspended.
404 No listing with that slug that you manage. Someone else's private listing answers 404 too.
429 More than 120 requests in a minute with this key. Wait a minute and try again.
401 response
{
  "type": "https://tools.ietf.org/html/rfc9110#section-15.5.2",
  "title": "Unauthorized",
  "status": 401,
  "detail": "The API key is invalid or has been revoked."
}

Rate limits

Each key can make 120 requests a minute. Past that the API answers 429 until the minute is up. Cache what you read: listings change when you edit them, not by the second.

Automated access is subject to the terms. Bulk collection is not allowed, and accounts that do it are suspended.