Loyalty Cards Without the App

Simple SMS rewards for small businesses — no apps, no fuss.

You've earned a stamp! 3/5 ⭐
2:34 PM
Free coffee ready! Code: BREW123
2:35 PM ✓✓
Jackpot entry confirmed! 🎲
2:36 PM
Loyalty progress: 4/5 stamps earned! ☕
2:37 PM ✓✓

How It Works

Customer Earns Stamp

Customer enters their phone number at checkout. No app downloads required.

Instant SMS Update

They receive an SMS instantly with their progress and jackpot entry confirmation.

Redeem & Win

Get reward codes via SMS plus automatic entry into monthly prize draws.

Manage customer loyalty with zero learning curve

Simple dashboard that any business owner can master in minutes. Track stamps, send rewards, and watch your customer retention soar.

  • ✓ Real-time customer tracking
  • ✓ Automated reward distribution
  • ✓ Monthly jackpot management
  • ✓ Analytics and insights
TextStamps Dashboard

Active Customers

1,247

Stamps Issued

8,932

Rewards Claimed

456

Everything You Need to Scale Your Business

Comprehensive loyalty management with enterprise-grade features designed for growing businesses.

Developer API

Integrate TextStamps into your existing systems with our simple REST API. Create stamps, manage customers, and track rewards programmatically.

cURL
Go
JavaScript
PHP
Python
React
curl -X POST \
  https://api.textstamps.com/v1/stamps \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_phone": "+1234567890",
    "business_id": "your_business_id",
    "location_id": "main_store",
    "stamp_count": 1
  }'
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
)

func main() {
    data := map[string]interface{}{
        "customer_phone": "+1234567890",
        "business_id":    "your_business_id",
        "location_id":    "main_store",
        "stamp_count":    1,
    }

    jsonData, _ := json.Marshal(data)
    req, _ := http.NewRequest("POST",
        "https://api.textstamps.com/v1/stamps",
        bytes.NewBuffer(jsonData))

    req.Header.Set("Authorization", "Bearer <YOUR_API_KEY>")
    req.Header.Set("Content-Type", "application/json")

    client := &http.Client{}
    resp, _ := client.Do(req)
    defer resp.Body.Close()

    var result map[string]interface{}
    json.NewDecoder(resp.Body).Decode(&result)
    fmt.Println(result)
}
import fetch from "node-fetch";

const response = await fetch("https://api.textstamps.com/v1/stamps", {
  method: "POST",
  headers: {
    "Authorization": "Bearer <YOUR_API_KEY>",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    customer_phone: "+1234567890",
    business_id: "your_business_id",
    location_id: "main_store",
    stamp_count: 1
  })
});

const data = await response.json();
console.log(data);
<?php
$ch = curl_init("https://api.textstamps.com/v1/stamps");

$data = json_encode([
    "customer_phone" => "+1234567890",
    "business_id" => "your_business_id",
    "location_id" => "main_store",
    "stamp_count" => 1
]);

curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $data,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("TEXTSTAMPS_API_KEY"),
        "Content-Type: application/json"
    ],
    CURLOPT_RETURNTRANSFER => true
]);

$response = curl_exec($ch);
curl_close($ch);

echo $response;
?>
import requests
import os

url = "https://api.textstamps.com/v1/stamps"
headers = {
    "Authorization": f"Bearer {os.getenv('TEXTSTAMPS_API_KEY')}",
    "Content-Type": "application/json"
}
data = {
    "customer_phone": "+1234567890",
    "business_id": "your_business_id",
    "location_id": "main_store",
    "stamp_count": 1
}

response = requests.post(url, headers=headers, json=data)
print(response.json())
import React, { useState } from 'react';

const StampButton = () => {
  const [message, setMessage] = useState('');

  const addStamp = async () => {
    try {
      const response = await fetch('https://api.textstamps.com/v1/stamps', {
        method: 'POST',
        headers: {
          'Authorization': 'Bearer <YOUR_API_KEY>',
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({
          customer_phone: '+1234567890',
          business_id: 'your_business_id',
          location_id: 'main_store',
          stamp_count: 1,
        }),
      });

      const data = await response.json();

      if (data.success) {
        setMessage(data.message_sent);
      }
    } catch (error) {
      console.error('Error adding stamp:', error);
    }
  };

  return (
    <div>
      <button onClick={addStamp}>Add Stamp</button>
      {message && <p>{message}</p>}
    </div>
  );
};

# Response: # { # "success": true, # "customer": { # "phone": "+1234567890", # "total_stamps": 4, # "stamps_to_reward": 1, # "next_reward_at": 5 # }, # "message_sent": "You've earned a stamp! 4/5 ⭐", # "jackpot_entry": true # }

RESTful API

Simple HTTP endpoints with JSON responses. Easy to integrate with any programming language.

Secure Authentication

API key authentication with rate limiting and request validation for enterprise security.

Real-time Analytics

Track API usage, customer engagement, and stamp distribution in real-time.

Simple, Transparent Pricing

Starter

$ 29 /month
  • ✓ 500 SMS messages
  • ✓ Basic loyalty tracking
  • ✓ Email support
  • ✓ Single location
  • ✓ Custom QR codes
  • ✓ Data exports

Pro

$ 99 /month
  • Everything in Starter and Standard plus...
  • ✓ 4,000 SMS messages
  • ✓ Multiple locations
  • ✓ Full analytics suite
  • ✓ Webhooks
  • ✓ Developer API
  • ✓ White-labeling

Free — $0/month

Perfect for testing the platform before scaling up.

  • ✓ Up to 25 customers
  • ✓ Basic loyalty tracking
  • ✓ Email support
  • ✓ Single location
  • ✓ Custom QR check-ins
  • ✓ Export data (CSV)
  • ⚠️ No SMS messages included
  • ⚠️ Max 3 stamps per customer per day
  • ⚠️ Max 100 total stamps per month

What Business Owners Say

"My customers love it. It paid for itself in a week. No more lost punch cards or forgotten apps."

Maria Rodriguez Sunrise Coffee Shop

"The jackpot feature is genius. Customers are more excited about earning stamps than ever before."

David Chen Chen's Bakery

"Setup took 5 minutes. My repeat customers increased by 40% in the first month."

Jennifer Walsh Walsh Hair Salon

Ready to make loyalty effortless?

Join thousands of businesses already using TextStamps to build customer loyalty without the complexity.