Skip to main content
RapidDev - Software Development Agency
retool-integrationsREST API Resource

How to Integrate Retool with ConvertKit

Connect Retool to ConvertKit using a REST API Resource with your ConvertKit API secret as the api_secret URL parameter on every request. Point the resource at https://api.convertkit.com/v3 and build queries against the subscribers, sequences, forms, and tags endpoints to create a creator-focused email dashboard that tracks subscriber growth, sequence performance, and form conversion rates.

What you'll learn

  • How to locate your ConvertKit API secret and configure it in a Retool REST API Resource
  • How to query ConvertKit subscribers, sequences, forms, and tags from Retool
  • How to build a subscriber management panel with search, tag assignment, and unsubscribe capabilities
  • How to display sequence performance metrics and form conversion rates using Retool components
  • How to combine ConvertKit subscriber data with other data sources in a unified creator dashboard
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Beginner15 min read20 minutesMarketingLast updated April 2026RapidDev Engineering Team
TL;DR

Connect Retool to ConvertKit using a REST API Resource with your ConvertKit API secret as the api_secret URL parameter on every request. Point the resource at https://api.convertkit.com/v3 and build queries against the subscribers, sequences, forms, and tags endpoints to create a creator-focused email dashboard that tracks subscriber growth, sequence performance, and form conversion rates.

Quick facts about this guide
FactValue
ToolConvertKit
CategoryMarketing
MethodREST API Resource
DifficultyBeginner
Time required20 minutes
Last updatedApril 2026

Build a ConvertKit Creator Email Dashboard in Retool

ConvertKit is the email platform of choice for bloggers, course creators, newsletter writers, and online educators who prioritize subscriber-centric email automation. While ConvertKit's own interface is purpose-built for creators, operations and growth teams often need a more flexible view of subscriber data — one that can join ConvertKit subscriber records with course enrollment data, transaction history from Stripe, or community platform membership status. A Retool integration with ConvertKit's API enables this unified view.

ConvertKit's API is one of the simplest in the email marketing space: there is no OAuth dance, no token refresh process, and no complex header signatures. The API secret is passed as a URL parameter with every request, making initial setup fast enough to complete in under 20 minutes. The API exposes subscribers (with their tags, custom fields, and sequence memberships), email sequences (with subscriber counts and step-level stats), forms (with conversion rates and subscriber acquisition data), and tags (for audience segmentation).

The most valuable Retool use case for ConvertKit is a subscriber intelligence dashboard that combines API data with creator-specific analytics. For example, a Retool app might show all subscribers who purchased a specific product (from Stripe) but are not yet enrolled in the corresponding email sequence (from ConvertKit), enabling the creator to manually trigger sequence enrollment for missed subscribers. Or it might surface subscribers with high engagement scores who have not yet been tagged as 'potential affiliate' — helping the creator identify partnership opportunities from their existing audience.

Integration method

REST API Resource

ConvertKit's V3 API uses a simple API secret authentication pattern — every request includes api_secret as a URL parameter rather than an Authorization header. Retool connects via a REST API Resource with the base URL https://api.convertkit.com/v3 and the API secret stored as a default URL parameter. Because Retool proxies all requests server-side, the API secret is never exposed in browser network traffic. JavaScript transformers reshape ConvertKit's nested JSON responses into flat datasets for Retool's Table and Stat components.

Prerequisites

  • A ConvertKit account (Creator or Creator Pro plan for full API access)
  • Your ConvertKit API secret from Account Settings → Advanced → API Secret
  • A Retool account with permission to create Resources
  • Basic familiarity with REST API concepts (base URLs, URL parameters)
  • Knowledge of your ConvertKit account's key data objects: sequences, forms, and tags used in your setup

Step-by-step guide

1

Locate your ConvertKit API secret

ConvertKit uses a single API secret for authentication — there is no OAuth application to configure and no token expiry to manage. To find your API secret, log in to your ConvertKit account and navigate to Account Settings → Advanced. You will see an API Secret section with your secret displayed (or a button to reveal it). Copy the API secret value. This is a long alphanumeric string that should be treated like a password — it grants full access to your ConvertKit account via the API. Do not share it publicly or commit it to code repositories. You will also see an API Key on this page — the API Key is used only for read-only public operations like listing forms. The API Secret is required for all subscriber write operations (adding tags, subscribing, unsubscribing) and for accessing subscriber-level data. For your Retool integration, you will use the API Secret. Immediately store this value in a Retool Configuration Variable: in Retool, navigate to Settings → Configuration Variables, click Add Variable, name it CONVERTKIT_API_SECRET, paste the value, and check the 'Is Secret' checkbox to prevent it from being exposed in query logs or the frontend. Save the configuration variable before continuing to the resource setup step.

Pro tip: ConvertKit shows your API Secret on the Advanced settings page. If you have previously shared this secret or suspect it was exposed, regenerate it from the same page — ConvertKit will issue a new secret and invalidate the old one immediately.

Expected result: Your ConvertKit API secret is copied and stored as a secret Configuration Variable named CONVERTKIT_API_SECRET in Retool Settings.

2

Configure the REST API Resource in Retool

In Retool, navigate to the Resources tab using the plug icon in the left sidebar or via the top navigation bar. Click Add Resource and select REST API from the resource type options. Name the resource 'ConvertKit API'. Set the Base URL to https://api.convertkit.com/v3. ConvertKit's authentication works by appending api_secret as a URL parameter to every request rather than using an Authorization header. To configure this, scroll to the URL Parameters section in the resource configuration and add a default URL parameter: Parameter Name → api_secret, Value → {{ retoolContext.configVars.CONVERTKIT_API_SECRET }}. This ensures every query sent through this resource automatically includes the API secret as a URL parameter without you having to add it manually to each individual query. Also add a second default URL parameter: api_key → {{ retoolContext.configVars.CONVERTKIT_API_KEY }} — some ConvertKit read-only endpoints require the API key rather than the secret, so having both pre-configured makes query creation easier. Do not add the API secret as a header — ConvertKit's API specifically expects it as a URL parameter. Click Save Resource. Test the connection by creating a query with Method GET and Path /subscribers — a successful response confirms the resource is correctly configured.

Pro tip: Because the api_secret is configured as a default resource URL parameter, it is automatically appended to every query path. You will see it included in the full request URL shown in Retool's query debugger — this is expected and not a security concern because Retool executes the request server-side, never in the browser.

Expected result: The ConvertKit API resource is saved with the api_secret URL parameter configured. A test GET request to /subscribers returns your account's subscriber list.

3

Build subscriber queries with search and filtering

Create the subscriber management queries for your dashboard. First, create a query named 'getSubscribers'. Set Method to GET and Path to /subscribers. Add URL parameters: page → {{ pagination.page || 1 }} (ConvertKit uses 1-indexed pagination), sort_field → created_at, sort_order → desc. ConvertKit returns 50 subscribers per page by default. The response object contains subscribers (an array of subscriber objects), total_subscribers (integer), page (current page), total_pages (total page count). Create a transformer to normalize the subscriber data. Each subscriber has: id, email_address, first_name, state (active, unsubscribed, bounced, complained), created_at, and fields (custom fields as a key-value object). The transformer flattens custom fields into named columns so they display correctly in Retool's Table. For email search, create a separate query named 'searchSubscriberByEmail'. Set Method to GET, Path to /subscribers, and add URL parameter email_address → {{ emailSearchInput.value }}. ConvertKit's email search on the subscribers endpoint returns the matching subscriber or an empty array. For tag-based filtering, create a query named 'getSubscribersByTag'. Set Method to GET and Path to /tags/{{ tagFilter.value }}/subscriptions. Add URL parameters: page → {{ pagination.page || 1 }}, subscriber_state → Active. This endpoint returns only subscribers with the specified tag who are in the active state.

subscribers_transformer.js
1// Transformer: normalize ConvertKit subscribers
2const subscribers = data.subscribers || [];
3return subscribers.map(sub => ({
4 id: sub.id,
5 email: sub.email_address,
6 first_name: sub.first_name || '',
7 state: sub.state,
8 created: new Date(sub.created_at).toLocaleDateString(),
9 // Flatten custom fields
10 ...Object.fromEntries(
11 Object.entries(sub.fields || {}).map(([key, val]) => [
12 'field_' + key, val || ''
13 ])
14 )
15}));

Pro tip: ConvertKit's /subscribers endpoint does not support full-text search — only exact email address lookup is supported via the email_address parameter. For name-based search, fetch a larger page and filter client-side in the transformer using the first_name field.

Expected result: The getSubscribers query returns paginated subscriber records with status and custom fields, and the email search query returns a specific subscriber when a valid email is entered.

4

Build sequence, form, and tag analytics queries

Create queries for the analytics section of your dashboard. Create a query named 'getSequences'. Set Method to GET and Path to /sequences. This returns all email sequences in your account with their id, name, hold (whether the sequence is paused), repeat (whether subscribers can repeat), and created_at. Create a query named 'getForms'. Set Method to GET and Path to /forms. The response includes form id, name, type (hosted, inline, modal, slide_in), format, embed_js, embed_url, archived status, and subscriber counts. Create a query named 'getTags'. Set Method to GET and Path to /tags. This returns all tags with their id, name, and created_at. For subscriber counts per tag (not included in the tags list), create a JavaScript transformer that computes totals from the getSubscribersByTag query results, or accept that exact counts require individual requests per tag and display the tag list without counts for the initial view. Create a transformer named 'formatForms' for the forms query that computes useful display values from the raw data: humanize the form type name (capitalize and add spaces), flag archived forms with a label, and sort forms by subscriber count descending so the highest-converting forms appear at the top of the list.

forms_transformer.js
1// Transformer: format ConvertKit forms with enriched display data
2const forms = data.forms || [];
3const TYPE_LABELS = {
4 hosted: 'Hosted Page',
5 inline: 'Inline',
6 modal: 'Modal Popup',
7 slide_in: 'Slide-In'
8};
9return forms
10 .filter(form => !form.archived)
11 .map(form => ({
12 id: form.id,
13 name: form.name,
14 type: TYPE_LABELS[form.type] || form.type,
15 total_subscribers: form.total_subscriptions || 0,
16 active_subscribers: form.active_subscriptions || 0,
17 status: form.archived ? 'Archived' : 'Active'
18 }))
19 .sort((a, b) => b.total_subscribers - a.total_subscribers);

Pro tip: For complex Retool integrations that combine ConvertKit subscriber data with Stripe purchase history, course platform enrollment records, and community membership status to build a unified creator audience intelligence dashboard, RapidDev's team can help architect and build the solution.

Expected result: The getSequences, getForms, and getTags queries return comprehensive lists of all ConvertKit account assets with relevant metadata for display in Retool Table components.

5

Assemble the creator dashboard UI and add subscriber actions

Build the complete dashboard using Retool's component library. Organize the app into two tabs using a Tab component: 'Subscribers' and 'Analytics'. In the Subscribers tab: add a Text Input named 'emailSearchInput' with placeholder 'Search by email address', a Select component named 'tagFilter' populated with getTags.data (value = tag id, label = tag name), and a Table named 'subscribersTable' bound to getSubscribers.data. Configure the state column with conditional tag formatting: green for 'active', red for 'unsubscribed', orange for 'bounced'. Add row actions: 'View Details' (opens a Modal showing the full subscriber profile), 'Unsubscribe' (triggers a DELETE /subscribers/{id}/unsubscribe query with a confirmation modal). For tag management, in the subscriber detail Modal add a multi-select component for tag assignment. Create queries: 'addTagToSubscriber' (POST /tags/{tagId}/subscriptions, body { email: subscribersTable.selectedRow.email }) and 'removeTagFromSubscriber' (DELETE /subscribers/{id}/tags/{tagId}). In the Analytics tab: add a Stat bar at the top showing total subscriber count from getSubscribers.data total_subscribers. Below, place a Table of sequences on the left and a Table of forms on the right. Add a Bar Chart below the forms table showing subscribers per form — use getForms.data as the dataset with name as the X axis and total_subscribers as the Y axis. Run all four base queries on page load.

add_tag_subscription.json
1// Query config: subscribe a user to a tag
2// POST /tags/{tagId}/subscriptions
3{
4 "email": "{{ subscribersTable.selectedRow.email }}",
5 "first_name": "{{ subscribersTable.selectedRow.first_name }}"
6}

Pro tip: Set the emailSearchInput query to run on change with a 600ms debounce rather than on a button click — ConvertKit's email lookup is fast and the debounced search provides a smoother user experience than requiring a separate Search button press.

Expected result: A two-tab creator dashboard provides subscriber management with search, tag control, and unsubscribe actions in the Subscribers tab, and sequence, form, and tag performance analytics in the Analytics tab.

Common use cases

Build a subscriber management panel with tag and sequence control

Create a Retool app that lists all ConvertKit subscribers with their email, name, tags, subscription date, and status. Allow team members to search by email or tag, view a subscriber's full profile including custom fields and sequence memberships, add or remove tags, and subscribe or unsubscribe individual contacts. This gives creators a faster alternative to ConvertKit's native interface for bulk subscriber management and manual tagging operations.

Retool Prompt

Build a Retool subscriber manager for ConvertKit. A search bar filters by email. A tag multi-select filters by tag. Show results in a Table with email, first name, created at, tags, and state. On row selection, show a detail panel with all custom fields, sequences they are enrolled in, and buttons to Add Tag, Remove Tag, and Unsubscribe.

Copy this prompt to try it in Retool

Build a sequence and form performance analytics dashboard

Create a Retool analytics panel that shows all ConvertKit email sequences with subscriber counts and open rates, alongside all forms with their conversion rates and total subscribers acquired. Include a Chart comparing subscriber acquisition by form over the last 30 days. This gives the creator a single-screen view of what content and forms are driving the most subscriber growth and sequence engagement.

Retool Prompt

Build a Retool analytics panel for ConvertKit. Show sequences in a Table with name, subscriber count, and completion rate. Show forms in a second Table with name, total subscribers, and conversion rate. Add a Bar Chart showing subscribers per form. Add a Stat component for total subscriber count.

Copy this prompt to try it in Retool

Build a tag-based audience segmentation panel for targeted outreach

Create a Retool panel that lists all ConvertKit tags with subscriber counts and allows the team to view all subscribers under a specific tag. Include a bulk-action workflow for adding a tag to multiple subscribers selected in the Table, and a filter to find subscribers who have a specific tag but not another tag — enabling precise audience segmentation for targeted broadcast emails.

Retool Prompt

Build a Retool segmentation panel for ConvertKit. Show all tags in a Table with name and subscriber count. On tag selection, load subscribers with that tag into a second Table. Include a Bulk Add Tag button that applies a selected tag to all checked rows. Add a filter for subscribers who have Tag A but not Tag B.

Copy this prompt to try it in Retool

Troubleshooting

401 Unauthorized on all ConvertKit API requests

Cause: The api_secret URL parameter is missing, incorrect, or the API secret has been regenerated in ConvertKit since the resource was configured, invalidating the stored value.

Solution: Open the Retool resource settings and verify that the api_secret URL parameter references the correct Configuration Variable. Go to ConvertKit Account Settings → Advanced and confirm the API secret matches what is stored in the Configuration Variable. If the secret has been regenerated, update the Configuration Variable with the new value. Avoid having trailing spaces in the pasted API secret value — these cause silent authentication failures.

Subscriber search returns no results even for valid email addresses

Cause: ConvertKit's email_address search parameter requires an exact match — partial email searches are not supported. Searching for 'john' instead of 'john@example.com' will return an empty array.

Solution: Ensure the email search input is populated with a complete, valid email address before running the search query. Add a note or placeholder text to the search input that says 'Enter full email address to search'. For partial search functionality, fetch all subscribers across pages and filter the results client-side in a JavaScript transformer using a .includes() comparison on the email field.

Total subscriber count shown in stats differs from count in ConvertKit dashboard

Cause: ConvertKit's subscriber count in the API includes subscribers in all states (active, unsubscribed, bounced, complained), while the ConvertKit dashboard typically shows only active subscribers by default.

Solution: Add a state=active URL parameter to your getSubscribers query to filter to active subscribers only, matching the ConvertKit dashboard's default count. Alternatively, display the total_subscribers field from the API response in a separate stat and add a note clarifying that it includes all subscriber states. The active-only count is the more meaningful metric for marketing operations.

Adding a tag to a subscriber fails with 422 Unprocessable Entity

Cause: The tag subscription endpoint requires the subscriber's email address in the request body, not their ID. Passing the subscriber ID instead of the email causes a 422 error.

Solution: Verify that the addTagToSubscriber query body uses email (the subscriber's email_address field from the table row) and not id. The POST /tags/{tagId}/subscriptions endpoint accepts an email field in the JSON body. Check that the subscribersTable.selectedRow.email references the correct column name from your transformer output — if you renamed the column to 'email_address' in the transformer, update the query body reference accordingly.

typescript
1// Correct tag subscription body
2{
3 "email": "{{ subscribersTable.selectedRow.email }}"
4}

Best practices

  • Store the ConvertKit API secret in a Retool Configuration Variable marked as 'secret' and reference it via retoolContext.configVars — never paste the raw secret value directly into the resource configuration field as visible plain text
  • Use the api_secret parameter exclusively for write operations and subscriber data access; use the less-privileged api_key parameter for read-only public endpoints like form embed information to minimize exposure of your secret
  • Configure the getSubscribers query with a state=active URL parameter so subscriber counts and tables match what creators see in ConvertKit's own interface, avoiding confusion about discrepant numbers
  • Add confirmation modals to unsubscribe actions — ConvertKit unsubscribes are reversible via the API (POST /subscribers/{id}/unsubscribe does not permanently delete), but the action immediately stops all email delivery to that subscriber
  • Use ConvertKit's built-in pagination (page parameter, 50 items per page) rather than attempting to fetch all subscribers in one request — large creator accounts can have hundreds of thousands of subscribers
  • Combine ConvertKit tag data with custom field data in transformer output to build computed segments client-side — for example, flagging subscribers who have the 'customer' tag but lack the 'onboarded' tag for follow-up outreach
  • For sequence analytics, create separate queries per sequence rather than trying to aggregate all sequence statistics in one call — ConvertKit's API returns sequence-level subscriber counts but not open/click rates, which must be viewed in the ConvertKit dashboard
  • Run tag and sequence list queries once on page load and cache the results in Retool state variables rather than re-fetching them on every subscriber action — tags and sequences change infrequently and caching reduces unnecessary API calls

Alternatives

Frequently asked questions

Does Retool have a native ConvertKit connector?

No, Retool does not have a native ConvertKit connector. You connect via a REST API Resource using ConvertKit's simple API secret URL parameter authentication. The setup takes about 20 minutes and provides access to all ConvertKit API endpoints including subscribers, sequences, forms, and tags. ConvertKit's straightforward authentication model makes it one of the easiest email platforms to connect to Retool.

Do ConvertKit API secrets expire?

ConvertKit API secrets do not expire automatically — they remain valid until you manually regenerate them from Account Settings → Advanced. Unlike OAuth tokens, there is no scheduled refresh process to manage. However, you should regenerate your API secret immediately if you suspect it has been exposed. After regenerating, update the value in your Retool Configuration Variable to restore the integration.

Can I add subscribers to ConvertKit sequences from Retool?

Yes. Use POST /sequences/{sequence_id}/subscriptions with a JSON body containing the subscriber's email address. This enrolls the subscriber in the sequence starting from the first email. In Retool, create a query for this endpoint triggered by a 'Enroll in Sequence' button in the subscriber detail view, with a Select component for the sequence and a confirmation modal before executing.

How do I get subscriber-level open and click data from ConvertKit in Retool?

ConvertKit's V3 API does not provide subscriber-level open or click event data — individual engagement events are not exposed through the API. The API provides aggregate statistics at the sequence and form level (total subscribers, conversion rates) but not per-subscriber email engagement history. For individual engagement data, you would need to use ConvertKit's native reporting interface or integrate with a third-party analytics tool via ConvertKit webhooks.

Can I use the same Retool ConvertKit integration for multiple ConvertKit accounts?

Yes, create a separate REST API Resource in Retool for each ConvertKit account, each configured with that account's API secret in a separate Configuration Variable. In your Retool dashboard, use a Select component to switch between accounts, binding the active resource dynamically using Retool's resource switching feature. This is useful for agencies or teams managing multiple creator accounts in a single Retool workspace.

RapidDev

Talk to an Expert

Our team has built 600+ apps. Get personalized help with your project.

Book a free consultation

Integrations are where projects stall

We wire Retool integrations like this one every week — auth, webhooks, edge cases included. Fixed-price builds from $13K, delivered in 6–10 weeks.

Talk to an integration engineer

We put the rapid in RapidDev

Need a dedicated strategic tech and growth partner? Discover what RapidDev can do for your business! Book a call with our team to schedule a free, no-obligation consultation. We'll discuss your project and provide a custom quote at no cost.