Connect Retool to Podia by creating a REST API Resource using Podia's API authentication. Query digital products, sales data, and subscriber information to build a creator business dashboard that combines course sales, membership revenue, and community metrics — giving creators and their teams operational visibility without manually switching between Podia's reporting sections.
| Fact | Value |
|---|---|
| Tool | Podia |
| Category | E-commerce |
| Method | REST API Resource |
| Difficulty | Beginner |
| Time required | 20 minutes |
| Last updated | April 2026 |
Build a Podia Creator Business Dashboard in Retool
Podia creators who grow their businesses to multiple products — courses, digital downloads, memberships, and coaching — quickly find that Podia's native analytics are optimized for individual product views rather than holistic business operations. Revenue tracking across all product types, subscriber lifetime value analysis, identifying which email list segments have the highest purchase rates, and month-over-month growth tracking all require piecing together data from multiple Podia sections.
Retool provides a configurable operations layer on top of Podia's API. You can build a creator business hub that shows total revenue broken down by product type (courses, memberships, downloads), lists all subscribers with their purchase history and current membership status, identifies your top customers by lifetime value, and tracks monthly recurring revenue from memberships alongside one-time course sales. When combined with your email marketing data from tools like Mailchimp in the same Retool app, you get a complete picture of content-to-customer conversion.
Podia's API provides access to your store's products, sales, subscriptions, and customer records. The integration uses simple API key authentication — no OAuth flow required — making it one of the fastest creator tool integrations to configure in Retool.
Integration method
Podia connects to Retool through a REST API Resource using Podia's API key authentication. Configure your Podia API key as a Bearer token in Retool's resource settings, and all queries to the Podia API are automatically authenticated. Retool proxies all requests server-side, keeping your API key off the browser and giving you secure access to Podia's products, sales, and subscriber data.
Prerequisites
- A Podia account with API access enabled (Pro plan or higher typically required for API access)
- A Podia API key from your Podia account settings (Settings → Integrations → API)
- A Retool account with permission to create Resources
- Familiarity with Retool's query editor, Table component, and Chart components
- At least one active Podia product (course, membership, or digital download) with sales data to query
Step-by-step guide
Obtain your Podia API key and configure the Resource
Log in to your Podia account and navigate to Settings → Integrations. Look for the API section where your API key is displayed. If you don't see an API section, your current Podia plan may not include API access — check Podia's current plan features or contact Podia support to confirm API availability for your account. Copy your API key. Before creating the Retool resource, store your API key securely. Navigate to your Retool instance's Settings tab → Configuration Variables, click Create Variable, name it PODIA_API_KEY, paste your API key, and mark it as Secret to restrict visibility to resource configurations. Navigate to the Resources tab in your Retool instance and click Add Resource. Select REST API from the resource type list. Name the resource 'Podia API'. In the Base URL field, enter https://developers.podia.com (or the current API base URL from Podia's API documentation — verify at developers.podia.com). In the Authentication section, select Bearer Token and enter {{ retoolContext.configVars.PODIA_API_KEY }} in the Token field. Add a default header: Key = Content-Type, Value = application/json. Click Save Changes. Test the resource by querying a basic endpoint like /v1/products to confirm authentication works.
Pro tip: Podia's API is still evolving — check developers.podia.com for the current base URL, available endpoints, and authentication method before configuring your Retool resource. If the API documentation is sparse, Podia's developer community or support team can clarify which endpoints are available for your use case.
Expected result: The Podia API REST resource is saved with Bearer token authentication. A test query returns product or store data, confirming the API key is valid and authentication is correctly configured.
Query products and store data
Create queries to retrieve your Podia product catalog. In your Retool app, open the Code panel and click the + icon to add a query. Name it getProducts, select the Podia API resource, set Method to GET, and set the path to /v1/products. POdia's products endpoint returns all products in your store — courses, digital downloads, memberships, coaching packages, and webinars. Each product has an id, name, type, price, status (published/draft), and sales count. Create a JavaScript transformer to format the products list and calculate revenue indicators: Bind a Retool Table component to the transformer output. Add a Select dropdown to filter products by type (course, membership, download). Add Stat components showing total products count, total published products, and a breakdown by product type. Create a second query named getProductDetails with Method GET and path /v1/products/{{ table_products.selectedRow.id }} to fetch detailed information about a selected product, including its price variants, enrollment count, and completion rates for courses.
1// JavaScript transformer — format Podia products for display2const products = data?.products || data?.data || [];34// Count by type5const typeCounts = products.reduce((acc, p) => {6 const type = p.type || p.product_type || 'unknown';7 acc[type] = (acc[type] || 0) + 1;8 return acc;9}, {});1011const productList = products.map(product => {12 const price = parseFloat(product.price || product.price_cents / 100 || 0);13 const type = product.type || product.product_type || 'unknown';1415 return {16 id: product.id,17 name: product.name || 'Untitled Product',18 type: type,19 type_label: type === 'course' ? 'Course'20 : type === 'membership' ? 'Membership'21 : type === 'download' ? 'Digital Download'22 : type === 'coaching' ? 'Coaching'23 : type === 'webinar' ? 'Webinar'24 : type,25 price: price > 0 ? `$${price.toFixed(2)}` : 'Free',26 price_num: price,27 status: product.published ? 'Published' : 'Draft',28 sales_count: product.sales_count || product.purchases_count || 0,29 created_at: product.created_at30 ? new Date(product.created_at).toLocaleDateString()31 : 'N/A',32 estimated_revenue: price > 0 && product.sales_count33 ? `$${(price * product.sales_count).toFixed(2)}`34 : 'N/A'35 };36});3738return productList;Pro tip: Podia may return price in cents (price_cents) rather than dollars depending on the API version. Check the raw API response in Retool's query result panel to determine the price format, and adjust your transformer accordingly — divide by 100 if prices appear 100x too large.
Expected result: The products table shows all Podia products with their type, price, status, and sales count. Stat components show product counts by type. Selecting a product row triggers the detail query.
Query sales data and revenue analytics
Create queries to retrieve sales transactions and revenue data. Create getSales with Method GET and path /v1/sales. Add URL parameters for filtering: Key = page, Value = {{ pagination.pageNumber || 1 }}, Key = per_page, Value = 50. For date-range filtering (if supported by Podia's API), add: Key = from, Value = {{ dateRange.start.toISOString().split('T')[0] }}, Key = to, Value = {{ dateRange.end.toISOString().split('T')[0] }}. Podia's sales records typically include: sale_id, product_name, product_type, buyer_email, buyer_name, amount, currency, status (completed, refunded, disputed), and created_at timestamp. Create a JavaScript transformer that calculates revenue metrics from the sales data: Bind a Retool Table to the sales transformer output. Add Stat components at the top of your dashboard showing: total revenue in the selected period, number of sales, average order value, and refund rate. Add a Chart component showing revenue by day or week. Configure it as a Line chart with date on the X-axis and cumulative revenue on the Y-axis for the selected period. Add a second grouped bar chart showing sales count by product type. Create a separate query named getMembershipRevenue if Podia exposes a dedicated subscriptions/memberships endpoint — this gives you MRR (Monthly Recurring Revenue) data separate from one-time purchases.
1// JavaScript transformer — calculate revenue analytics from Podia sales2const sales = data?.sales || data?.data || [];34// Revenue calculations5const completedSales = sales.filter(s =>6 s.status === 'completed' || s.status === 'paid' || !s.status7);8const refundedSales = sales.filter(s => s.status === 'refunded');910const totalRevenue = completedSales.reduce((sum, s) => {11 const amount = parseFloat(s.amount || s.amount_cents / 100 || 0);12 return sum + amount;13}, 0);1415const refundedRevenue = refundedSales.reduce((sum, s) => {16 return sum + parseFloat(s.amount || 0);17}, 0);1819// Format individual sales for table20const saleRows = sales.map(sale => {21 const amount = parseFloat(sale.amount || (sale.amount_cents ? sale.amount_cents / 100 : 0) || 0);22 return {23 id: sale.id,24 product_name: sale.product_name || sale.product?.name || 'Unknown Product',25 product_type: sale.product_type || sale.product?.type || 'N/A',26 buyer_name: sale.buyer_name || sale.customer_name || 'N/A',27 buyer_email: sale.buyer_email || sale.customer_email || 'N/A',28 amount: `$${amount.toFixed(2)}`,29 amount_num: amount,30 status: sale.status || 'completed',31 currency: sale.currency || 'USD',32 sale_date: sale.created_at33 ? new Date(sale.created_at).toLocaleDateString()34 : 'N/A'35 };36});3738return {39 sales: saleRows,40 summary: {41 total_revenue: `$${totalRevenue.toFixed(2)}`,42 total_sales: completedSales.length,43 avg_order_value: completedSales.length > 044 ? `$${(totalRevenue / completedSales.length).toFixed(2)}`45 : '$0',46 refund_count: refundedSales.length,47 refund_rate: sales.length > 048 ? `${((refundedSales.length / sales.length) * 100).toFixed(1)}%`49 : '0%',50 net_revenue: `$${(totalRevenue - refundedRevenue).toFixed(2)}`51 }52};Pro tip: Bind Stat component values to {{ getSalesTransformer.data.summary.total_revenue }}, {{ getSalesTransformer.data.summary.total_sales }}, etc., and the Table's data to {{ getSalesTransformer.data.sales }}. Using a single transformer for both the summary stats and table data reduces the number of API calls needed.
Expected result: The sales table shows recent Podia transactions with product name, buyer information, amount, and status. Stat components display total revenue, sale count, average order value, and refund rate for the selected period.
Build a subscriber and customer management panel
Create queries to manage Podia subscribers and customers. Create getSubscribers with Method GET and path /v1/subscribers (or /v1/customers depending on Podia's API). Add URL parameters: Key = page, Value = {{ pagination.pageNumber || 1 }}, Key = per_page, Value = 50. For search by email, create searchSubscriber with Method GET and path /v1/subscribers and URL parameter: Key = email, Value = {{ textInput_email.value }}. Podia subscriber records typically include: subscriber_id, email, name, created_at (join date), membership_status, total_spent, and product_enrollments. Create getSubscriberPurchases with Method GET and path /v1/subscribers/{{ table_subscribers.selectedRow.id }}/purchases (verify the exact endpoint with Podia's documentation). This provides the complete purchase history for a specific subscriber. Bind a Retool Table named table_subscribers to the subscriber query results. Add a search input that triggers searchSubscriber. When a subscriber is selected, trigger getSubscriberPurchases to populate a second Table showing that subscriber's complete purchase history. Add Stat components in the detail panel showing: subscriber lifetime value (sum of all purchases), membership status badge, number of products owned, and join date. For RapidDev-style comprehensive creator business dashboards combining Podia subscriber data with email engagement from Mailchimp or ConvertKit, Retool's multi-resource architecture lets you join platforms in the same app for a complete audience analytics view.
1// JavaScript transformer — format Podia subscribers with LTV calculation2const subscribers = data?.subscribers || data?.customers || data?.data || [];34return subscribers.map(sub => {5 const totalSpent = parseFloat(sub.total_spent || sub.lifetime_value || 0);6 const membershipStatus = sub.membership_status7 || (sub.active_membership ? 'active' : 'none');89 return {10 id: sub.id,11 name: sub.name || `${sub.first_name || ''} ${sub.last_name || ''}`.trim() || 'No Name',12 email: sub.email || 'N/A',13 membership_status: membershipStatus,14 status_badge: membershipStatus === 'active' ? '✓ Active Member'15 : membershipStatus === 'canceled' ? '✗ Canceled'16 : membershipStatus === 'paused' ? '⏸ Paused'17 : 'No Membership',18 lifetime_value: totalSpent > 0 ? `$${totalSpent.toFixed(2)}` : '$0',19 lifetime_value_num: totalSpent,20 products_count: sub.products_count || sub.enrollments_count || 0,21 joined: sub.created_at22 ? new Date(sub.created_at).toLocaleDateString()23 : 'N/A',24 last_login: sub.last_login_at || sub.last_seen_at25 ? new Date(sub.last_login_at || sub.last_seen_at).toLocaleDateString()26 : 'Unknown',27 segment: totalSpent >= 500 ? 'VIP'28 : totalSpent >= 100 ? 'Regular'29 : 'New'30 };31}).sort((a, b) => b.lifetime_value_num - a.lifetime_value_num);Pro tip: Sort subscribers by lifetime_value_num descending to surface your highest-value customers at the top of the table. Add a 'Segment' column with conditional formatting (VIP in gold, Regular in blue, New in grey) using Retool's cell style options to make customer tiers immediately visible without needing to read the numbers.
Expected result: The subscribers table shows all Podia customers sorted by lifetime value with membership status badges and segmentation labels. Selecting a subscriber loads their complete purchase history in the detail panel below.
Common use cases
Build a multi-product revenue and sales tracking dashboard
Create a Retool app that shows total revenue across all Podia product types (courses, memberships, downloads, coaching) broken down by month. Add a product selector to drill down into sales for a specific product, with a table showing each purchase: buyer name, purchase date, amount, and payment status. Include Chart components showing revenue trends and product revenue distribution.
Build a Podia revenue dashboard with Stat components showing total MRR from memberships, total course revenue, total download revenue, and total customers this month, a sortable Table of recent sales with product name, buyer email, amount, and date, and a bar chart comparing revenue by product type for the last 6 months.
Copy this prompt to try it in Retool
Subscriber and customer management panel
Build a Retool customer panel where you can search for any Podia subscriber by email, view their full purchase history (all courses bought, active memberships, downloads), membership status (active/canceled/paused), and total lifetime value. Add action buttons to view their email engagement history and flag high-value customers for VIP outreach.
Create a subscriber lookup panel with an email search input, a profile section showing subscriber name, join date, membership status, and lifetime value, a Table of all purchases with product name, purchase date, and amount, and a tag system to label high-value customers for personalized outreach campaigns.
Copy this prompt to try it in Retool
Membership retention and churn analysis dashboard
Build a membership health dashboard that shows active vs. canceled membership counts over time, identifies subscribers whose memberships expire in the next 30 days, and tracks monthly churn rate trends. Add a 'at-risk subscribers' table showing members whose engagement has dropped (last login > 30 days) alongside their membership renewal dates.
Build a membership retention panel with Stat components showing active members, monthly churn rate, and members expiring this month, a Table of at-risk members filtered by last_login_date older than 30 days sorted by renewal date, and a line chart showing membership count trend over the past 12 months.
Copy this prompt to try it in Retool
Troubleshooting
401 Unauthorized error on all Podia API requests
Cause: The API key is incorrect, has been regenerated since the resource was configured, or the API key doesn't have the required permissions for the endpoints being accessed.
Solution: Log in to your Podia account → Settings → Integrations and verify your current API key matches what's stored in the PODIA_API_KEY configuration variable. If you've regenerated the API key recently, update the configuration variable with the new key value. Also confirm that Bearer Token authentication is the correct method — check Podia's current API documentation at developers.podia.com for the exact authentication header format.
Product sales counts or revenue data appears to be zero or missing
Cause: Podia's API may return sales data in a separate endpoint rather than embedded in product objects. The products endpoint typically returns product metadata, while sales data requires querying a dedicated sales or purchases endpoint.
Solution: Check Podia's API documentation to identify the correct endpoint for sales data (/v1/sales, /v1/purchases, or similar). Create a separate query for sales data rather than expecting it to be included in the products response. Verify whether Podia's API requires a date range parameter for sales queries — some creator platform APIs only return recent sales without explicit date filtering.
API returns 404 Not Found for endpoint paths listed in this guide
Cause: Podia's API endpoints may have changed since this guide was written, or the current API version uses different URL patterns than those described here.
Solution: Visit developers.podia.com to see the current API documentation and verify the correct endpoint paths for your Podia plan. Podia's API has evolved over time — the base URL and endpoint structure may differ from /v1/products. If API documentation is limited, contact Podia support at support@podia.com to request the current API endpoint list for your account tier.
Membership subscriber data shows all members as active even though some have canceled
Cause: The subscriber list endpoint may not include membership status by default, or the membership_status field may require a separate API call per subscriber to retrieve current status.
Solution: Check whether Podia's API supports a membership_status filter parameter on the subscribers endpoint to return only active or canceled members. If membership status isn't available in the list endpoint, create a separate query to the memberships endpoint (/v1/memberships or /v1/subscriptions) which should return subscription-specific data including status and renewal dates.
Best practices
- Store your Podia API key as a Secret configuration variable in Retool — this prevents other Retool users from viewing the key while still allowing them to use dashboards that depend on it.
- Build revenue calculations in JavaScript transformers rather than relying on Podia's native reporting — this allows you to apply custom business logic (custom date ranges, product type groupings, currency conversion) that Podia's fixed reports don't support.
- Sort your subscriber table by lifetime value descending to surface your most valuable customers at the top — this is more operationally useful than chronological sorting for identifying VIP customers who deserve personalized attention.
- Add segment labels (VIP, Regular, New) based on lifetime value thresholds in your transformer — these segments allow your team to filter the subscriber table for targeted outreach without needing to calculate thresholds manually.
- Cache the products list query with a 15-minute TTL since product catalog changes are infrequent — this reduces Podia API calls significantly when the dashboard is actively used by multiple team members.
- Calculate net revenue (total sales minus refunds) separately from gross revenue in your transformers — presenting both figures helps identify when refund rates are impacting actual business income.
- Build a 30-day membership expiration alert section that queries subscribers with renewal dates in the next 30 days — proactive outreach to at-risk members before they churn is more effective than reactivation campaigns.
- Combine Podia sales data with email marketing analytics in the same Retool app to correlate email campaigns with purchase conversions — this requires adding a second resource (Mailchimp, ConvertKit, etc.) to the same Retool app.
Alternatives
Teachable focuses specifically on online course creation with a more mature LMS feature set, while Podia covers the full creator stack (courses, downloads, memberships, community) in one platform.
Thinkific has stronger course-building tools and a more mature API for course-specific operations, while Podia is better for creators who want a unified platform for multiple product types.
Skillshare is a marketplace where instructors earn royalties from a subscription pool rather than selling directly, while Podia enables creators to sell directly to their own audience with full price control and customer ownership.
Frequently asked questions
Does Podia have a publicly documented API for Retool integration?
Podia has an API available for higher-tier plans, accessible at developers.podia.com. The API provides access to products, sales, subscribers, and membership data. API access availability varies by subscription plan — Pro and above typically include API access. If you don't see API credentials in Podia Settings → Integrations, contact Podia support to confirm API availability for your plan.
Can I pull Podia email marketing data into Retool through the API?
Podia's built-in email marketing data (campaign sends, open rates, click rates) may be accessible through the API if your plan includes email marketing features. However, for more comprehensive email analytics, consider connecting your primary email marketing tool (if you use one separately) as a second resource in the same Retool app. This gives you both Podia sales data and detailed email engagement data in one dashboard.
How do I calculate Monthly Recurring Revenue (MRR) from Podia memberships in Retool?
Query Podia's memberships or subscriptions endpoint to get all active memberships with their billing amounts and billing intervals (monthly/annual). In a JavaScript transformer, sum up monthly memberships at face value and convert annual memberships by dividing by 12. MRR = sum(monthly_plan_prices) + sum(annual_plan_prices / 12). Store this calculation in a Stat component and run it on a daily schedule using a Retool Workflow to track MRR trend over time in a database table.
Can I send automated emails to Podia subscribers from Retool?
If Podia's API exposes an endpoint for triggering emails or adding subscribers to email sequences, you can POST to those endpoints from Retool queries. More commonly, teams export subscriber segments from Retool (using the table CSV export or a database write) and import them into dedicated email marketing tools. Connecting Podia subscriber data with a tool like Mailchimp via their respective Retool resources allows building automated email workflows without relying on Podia's email endpoints.
How do I track which of my Podia products is most profitable in Retool?
Create a product performance query that joins your product list with sales data. In a JavaScript transformer, group sales by product_id, sum the revenue per product, and calculate the revenue percentage contribution of each product to total revenue. Sort by total revenue descending. For digital products with no variable cost, revenue and profit are equivalent — but if you have product-specific costs (production costs, platform fees), you can add a cost column to your Retool database and join it into the transformer for true profit calculation.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation