Course platforms, Zapier and Make
Count a member action from Teachable, Thinkific, Circle, LearnWorlds or Shopify Flow with one copied URL and no code.
Course platforms, Zapier and Make
Your course platform already knows when a member finishes a lesson or posts in the community. Zapier or Make can pass that moment to Streakfox. You copy one URL, map one field, and the member's streak moves.
Streakfox has no Zapier or Make app listing. You use the built-in webhook steps both tools ship with, which work with any platform they can trigger from.
What you need
- A Streakfox program. Onboarding creates one.
- Your program's incoming URL. In onboarding, choose Course platform, Zapier or Make, then copy it on the Make the right moment count step. Later you'll find it on the program's Embed tab.
- A Zapier or Make account that can trigger on your platform's member action.
The URL holds its own secret. Anyone who has it can count actions for your program, so keep it inside your automation tool. If it leaks, choose Replace URL and paste the new one into your Zap. The old one stops working at once.
Zapier recipe
- Trigger. Pick your course platform's app and the action you want to count, such as "lesson completed" or "new post".
- Action. Add Webhooks by Zapier and choose POST. Paste your incoming URL. Leave Payload Type as Form.
- Data. Add
memberand map the member's email from the trigger. If the trigger has a lesson, post or order ID, addcompletion_idand map that too. Then choose Test step.
A good test returns 202 with "ok": true. Streakfox setup shows Last received with a masked email such as j•••@e••• a moment later.
Make recipe
- Add your platform's module as the trigger.
- Add HTTP → Make a request. Set Method to POST and URL to your incoming URL.
- Set Body type to application/x-www-form-urlencoded and add the same
memberandcompletion_idfields. Run the scenario once.
Shopify Flow
Use Send HTTP request with method POST, your incoming URL and a JSON body. Insert the customer's email and the order ID with Flow's variable picker:
{ "member": "customer email variable", "completion_id": "order ID variable" }Fields
| Field | Required | What to map |
|---|---|---|
member | Yes | The member's email, or the platform's user ID. Use the same one always. |
completion_id | No | An ID for this completion, such as the lesson or post ID. |
occurred_at | No | When it happened, as an ISO date like 2026-10-09T14:30:00Z. Last 7 days. |
Streakfox also reads email, member_email, user_id and member_id as the member, so a field you already named usually works. Field names ignore case and treat spaces and dashes as underscores, so Member ID works too.
Send flat form fields or flat JSON. There's no event field: the URL already belongs to one program.
How the member is identified
Streakfox trims the value, lowercases it if it looks like an email, and hashes it with a key unique to your project. Only the hash is stored. Your members' emails never reach your Streakfox database.
Jane@Example.com and jane@example.com are the same member. A platform user ID is matched exactly, so User_7 and user_7 are two members. Pick email or ID and stick with it.
Retries and repeats
Zapier and Make can replay a step. Streakfox ignores repeats for 24 hours using this rule:
- With
completion_id. Each member and ID counts once. This is the most accurate setup. - Daily streak, no
completion_id. The first action per member per program day counts. More actions that day change nothing, which a daily streak doesn't need anyway. - Running total, no
completion_id. One action per member peroccurred_at, or per minute whenoccurred_atis missing too. Two real actions from the same member in the same minute count as one. Mapcompletion_idif that matters for you.
A repeat still returns 202, with "duplicate": true.
Show progress on your platform
Add the widget to your member area with the signed-in member's email in data-member:
<script
src="https://cdn.streakfox.com/widget.js"
data-project="YOUR_PROJECT_KEY"
data-event="YOUR_ACTION"
data-member="MEMBER_EMAIL"
defer
></script>Replace MEMBER_EMAIL with the variable your platform prints for the signed-in member. Use the same email your Zap sends as member. If a page leaves the variable unfilled, the widget there shows progress for that browser only. Streakfox setup fills it in for you when you pick your platform.
Here's what each platform's own documentation says today:
| Platform | data-member value | Where the widget goes | Zapier trigger to count | Source |
|---|---|---|---|---|
| LearnWorlds | {{USER.EMAIL}} | Site builder custom code, the "logged in" body slot | Learning Activity Completed | LearnWorlds |
| Shopify | {{ customer.email }} | theme.liquid | Use Shopify Flow instead | Shopify |
| Teachable | Not named in its docs. Test one first. | Site → Code Snippets | Lecture Completed | Teachable |
| Thinkific | JavaScript only. Needs a short script. | Settings → Code & analytics → Site footer code | Lesson Completed | Thinkific |
| Circle | Documented for its mobile app only | Site → Code snippets | Member Completed Course Lesson | Circle |
| Memberstack | JavaScript only (member.auth.email) | Custom code on your signed-in pages | None for completions. Count from the tool hosting lessons. | Memberstack |
| Kajabi | None documented | The widget can't tell members apart yet | None for lessons. Assessment Completed is the closest. | Kajabi |
| Podia | Not available | Custom code runs on public pages only, not when signed in | None for lessons | Podia |
| Skool | Not available | Skool doesn't offer custom code | None for lessons. Answered Membership Questions, New Paid Member. | Skool on Zapier |
Zapier trigger names come from each platform's Zapier app page. Where a platform has no completion trigger, Streakfox can only count the events it does offer.
On Shopify, wrap the widget in {% if customer %} so it only loads for signed-in customers.
What data-member can and can't do
data-member chooses whose progress the widget displays. Anyone can read your page's source and put another member's email in it, so Streakfox treats it as display only:
- It shows streak counts, the week and milestone messages.
- It never reveals protected reward values, such as coupon codes or reward links. Those still need a signed identity token.
- It never shows any other member's data, emails or IDs. Streakfox doesn't store them.
So someone who guesses a member's email on your site could see that member's streak count. If that's not acceptable for your community, use a signed identity token instead.
Errors
Zapier and Make show the message from Streakfox when a step fails. Streakfox setup shows the latest one too, with a next step.
| Status | error | Fix |
|---|---|---|
| 400 | MEMBER_REQUIRED | Map the member's email to the member field. |
| 400 | INVALID_OCCURRED_AT | Send a date from the last 7 days, or leave it out. |
| 400 | INVALID_BODY | Send form fields or flat JSON. |
| 404 | HOOK_NOT_FOUND | The URL was replaced. Copy the current one from Streakfox. |
| 409 | IDEMPOTENCY_KEY_IN_PROGRESS | The same action is being counted. Retry in a second. |
Test, then go live
Until your program goes live, every action counts as a test. Run your Zap with a test member, watch Streakfox setup confirm their progress, then go live.