Skip to content
Back to skills

Loops

ASecurity

Send marketing and transactional emails with Loops. Use when a user asks to set up email marketing for a SaaS, create drip campaigns, send product update emails, or use a modern alternative to Mailchimp for startups.

  • 142 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 29, 2026
content-marketingtypescriptgoapi

Works with

  • terminal
  • api

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned May 29, 2026

npx -y skills add TerminalSkills/skills --skill loops --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Loops?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Loops
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/terminalskills-loops/badge)](https://www.skillsdirectory.com/skills/terminalskills-loops)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: loops
description: >-
  Send marketing and transactional emails with Loops. Use when a user asks to
  set up email marketing for a SaaS, create drip campaigns, send product update
  emails, or use a modern alternative to Mailchimp for startups.
license: Apache-2.0
compatibility: 'Any platform via REST API'
metadata:
  author: terminal-skills
  version: 1.0.0
  category: business
  tags:
    - loops
    - email
    - marketing
    - saas
    - campaigns
---

# Loops

## Overview

Loops is email marketing built for SaaS. Clean UI, event-based automations, transactional emails, and marketing campaigns. Designed as a modern Mailchimp alternative for startups and product teams.

## Instructions

### Step 1: Transactional Email

```typescript
// lib/loops.ts — Send transactional email via Loops API
export async function sendTransactional(
  email: string,
  transactionalId: string,
  data: Record<string, string>
) {
  await fetch('https://app.loops.so/api/v1/transactional', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      Authorization: `Bearer ${process.env.LOOPS_API_KEY}`,
    },
    body: JSON.stringify({
      email,
      transactionalId,    // template ID from Loops dashboard
      dataVariables: data,
    }),
  })
}

// Usage: send welcome email
await sendTransactional('user@example.com', 'welcome_email', {
  firstName: 'John',
  planName: 'Pro',
})
```

### Step 2: Track Events

```typescript
// Track events to trigger automated sequences
await fetch('https://app.loops.so/api/v1/events/send', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    Authorization: `Bearer ${process.env.LOOPS_API_KEY}`,
  },
  body: JSON.stringify({
    email: 'user@example.com',
    eventName: 'plan_upgraded',
    eventProperties: { plan: 'pro', mrr: 49 },
  }),
})
```

### Step 3: Contact Management

```typescript
// Create or update contact
await fetch('https://app.loops.so/api/v1/contacts/update', {
  method: 'PUT',
  headers: {
    'Content-Type': 'application/json',
    Authorization: `Bearer ${process.env.LOOPS_API_KEY}`,
  },
  body: JSON.stringify({
    email: 'user@example.com',
    firstName: 'John',
    userGroup: 'pro-users',
    plan: 'pro',
  }),
})
```

## Guidelines

- Free tier: 1,000 contacts, 2,000 emails/month.
- Event-based automations: trigger email sequences from app events (signup, upgrade, churn risk).
- Built for SaaS — has concepts like user groups, event properties, and lifecycle stages.
- For transactional-only needs, Resend is simpler. For full marketing, Loops is better.

Files in this skill

  • SKILL.md2.5 KB
  • _scores.json1.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…