Intermediate Use Case

Adding Contacts, Tags, & Sending Trigger-Based Email Sequences with Zapier and Lemón API.

💡 How It Works:

The moment you sign up with Lemón, we set you up with everything you need. Think of this as plug-and-play automation. Quick setup, big results.
  1. A contact list named "User List" is automatically created.
  2. A pre-built 7-day email sequence that has led to sales in the past 90 days (tested and proven to convert leads into customers).
  3. The 7-day email sequence is triggered by the "new_user" tag.
  4. To modify the email sequence, you only need to go to Email Funnels and tweak the placeholders like [Your Name],[Customer Pain Point], etc.

📌 Getting Started:

Use our API or Zapier integration to add a user to the contact list, tag them, and trigger your 7-day email sequences. Lemón’s RESTful API provides developers full control over messaging and contact management. 
Key Features
  • Add a contact to a contact list, tag/untag contacts dynamically
  • Send transactional emails
  • Triggers and actions

Example Use Case with Zapier:

👉Google Form + Lemón


Example Use Case with Lemón API:

Authorization

Include your API key in the X-Auth-APIKey header. Retrieve your API key from the Integrate > API & SMTP section in the Lemón UI.

Sample HTTP Request (for email sending):

POST /transactional/send
Host: app.xn--lemn-sqa.com
Content-Type: application/json
X-Auth-APIKey: your_lemon_api_key

{
  "fromname": "Your SaaS",
  "fromemail": "noreply@yoursaas.com",
  "to": "recipient@example.com",
  "subject": "Welcome!",
  "body": "Thank you for joining us."
}

Sample HTTP Request (for adding a contact):

Include your list ID in the {your_list_id} header. Retrieve your list ID from Contacts > Contact Lists > User List.

POST /lists/{your_list_id}/feed
Host: app.xn--lemn-sqa.com
Content-Type: application/json
X-Auth-APIKey: your_lemon_api_key
{
  "email": "ted@domain.com",
  "tags": [
    "new_user"
  ],
  "removetags": [
    "string"
  ],
  "resubscribe": false,
  "unsubscribe": false,
  "data": {
    "First Name": "Ted"
  }
}

For more details about available routes, refer to the API documentation at Lemón API Docs.

 

Example Use Case: AI Agent Sending A Welcome Email

👉Click here to demo the AI Agent.

When you sign up, your name and email are automatically added to the default contact list and tagged as a 'new_user,' and you will receive a welcome email. 

This is to demonstrate how you can add a user to a contact list, tag them, send an email, and trigger the 7-day email sequence.

If you interact with it, you will also get the contextual email example from the 'Advanced Use Case' after the 'end_conversation' event fires.


More Use Case:

 

👉Custom Form + Lemón

In this case, when a new user signs up - they get added to the default "User List" contact list and tag them as "new_user".

This will trigger the pre-built 7-day email sequence designed to convert new users into paying customers.

Here are the scripts used in Javascript & Python:

Javascript


'use server'

import { contactFormSchema } from '@/lib/schema'
import { z } from 'zod'

export async function contactFormAction(
  _prevState: unknown,
  formData: FormData
) {
  const defaultValues = z
    .record(z.string(), z.string())
    .parse(Object.fromEntries(formData.entries()))

  try {
    const data = contactFormSchema.parse(Object.fromEntries(formData))
    
    // Make the API call to Lemón to add a contact to the "User List"
    const addContactResponse = await fetch(`https://app.xn--lemn-sqa.com/api/lists/${process.env.LEMN_LIST_ID}/feed`, {
      method: 'POST',
      headers: {
        'accept': 'application/json',
        'X-Auth-APIKey': process.env.LEMON_EMAIL_API_KEY,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        email: data.email,
        tags: ['new_user'],
        resubscribe: false,
        unsubscribe: false,
        data: {
          'First Name': data.name
        }
      })
    })

    if (!addContactResponse.ok) {
      throw new Error('Failed to add contact to mailing list')
    }

    // Send transactional email via Lemón API
    const sendEmailResponse = await fetch('https://app.xn--lemn-sqa.com/api/transactional/send', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'X-Auth-APIKey': process.env.LEMN_API_KEY
      },
      body: JSON.stringify({
        fromname: "Alexa",
        fromemail: "mail@elitegci.com",
        to: data.email,
        subject: "Welcome",
        body: "<html><body>Welcome to my service</body></html>"
      })
    })

    if (!sendEmailResponse.ok) {
      throw new Error('Failed to send welcome email')
    }

    return {
      defaultValues: {
        name: '',
        email: '',
        message: '',
      },
      success: true,
      errors: null,
    }
  } catch (error) {
    console.error('Error in contactFormAction:', error)
    if (error instanceof z.ZodError) {
      return {
        defaultValues,
        success: false,
        errors: Object.fromEntries(
          Object.entries(error.flatten().fieldErrors).map(([key, value]) => [
            key,
            value?.join(', '),
          ])
        ),
      }
    }

    return {
      defaultValues,
      success: false,
      errors: {
        form: 'An error occurred while processing your request. Please try again.'
      },
    }
  }
}

Python

import os
import requests
from typing import Dict, Any
from dataclasses import dataclass

@dataclass
class ContactFormData:
    name: str
    email: str
    message: str

def validate_form_data(data: Dict[str, Any]) -> ContactFormData:
    # Basic validation (you might want to use a library like Pydantic for more robust validation)
    if not data.get('name') or len(data['name']) < 2 or len(data['name']) > 32:
        raise ValueError("Name must be between 2 and 32 characters")
    if not data.get('email') or '@' not in data['email']:
        raise ValueError("Invalid email address")
    if not data.get('message') or len(data['message']) < 2 or len(data['message']) > 1000:
        raise ValueError("Message must be between 2 and 1000 characters")
    
    return ContactFormData(
        name=data['name'],
        email=data['email'],
        message=data['message']
    )

def contact_form_action(form_data: Dict[str, Any]) -> Dict[str, Any]:
    try:
        data = validate_form_data(form_data)
        
        # Add contact to Lemón list
        add_contact_response = requests.post(
            f"https://app.xn--lemn-sqa.com/api/lists/{os.environ['LEMN_LIST_ID']}/feed",
            headers={
                'accept': 'application/json',
                'X-Auth-APIKey': os.environ['LEMN_API_KEY'],
                'Content-Type': 'application/json'
            },
            json={
                'email': data.email,
                'tags': ['new_user'],
                'resubscribe': False,
                'unsubscribe': False,
                'data': {
                    'First Name': data.name
                }
            }
        )
        
        if not add_contact_response.ok:
            raise Exception('Failed to add contact to mailing list')
        
        # Send transactional email
        send_email_response = requests.post(
            'https://app.xn--lemn-sqa.com/api/transactional/send',
            headers={
                'Content-Type': 'application/json',
                'X-Auth-APIKey': os.environ['LEMN_API_KEY']
            },
            json={
                'fromname': "Alexa",
                'fromemail': "mail@elitegci.com",
                'to': data.email,
                'subject': "Welcome",
                'body': "<html><body>Welcome to my service</body></html>"
            }
        )
        
        if not send_email_response.ok:
            raise Exception('Failed to send welcome email')
        
        return {
            'defaultValues': {
                'name': '',
                'email': '',
                'message': '',
            },
            'success': True,
            'errors': None,
        }
    
    except ValueError as ve:
        return {
            'defaultValues': form_data,
            'success': False,
            'errors': str(ve),
        }
    except Exception as e:
        print(f"Error in contact_form_action: {str(e)}")
        return {
            'defaultValues': form_data,
            'success': False,
            'errors': {
                'form': 'An error occurred while processing your request. Please try again.'
            },
        }

# Example usage
if __name__ == "__main__":
    sample_form_data = {
        "name": "John Doe",
        "email": "john@example.com",
        "message": "Hello, this is a test message."
    }
    
    result = contact_form_action(sample_form_data)
    print(result)

 

Note: These email sequences are plug-and-play, saving you time while optimizing your email workflows.


Was this article helpful?
© 2025 Lemón SES