Send mass SMS campaigns, notifications, and alerts in bulk using your Android phone. Flat €5/month — no per-message charges regardless of volume.
Start Free Trial See Pricing| Plan | Daily API Limit | Monthly Estimate | Price |
|---|---|---|---|
| FREE (Trial) | 100 SMS/day | ~3,000/month | €0 (7 days) |
| PRO Monthly | 10,000 SMS/day | ~300,000/month | €5/month |
| PRO Annual | 10,000 SMS/day | ~300,000/month | €52/year (€4.33/mo) |
* Carrier daily limits may also apply. Android native SmsManager is subject to the carrier's daily SMS policies.
Loop through your recipient list and send each message via the REST API. Works on any machine with Python 3 installed.
import requests
import time
API_KEY = "your_api_key_here" # from SMS Gateway Master → Settings
ENDPOINT = "https://us-central1-sms-gateway-ae7e1.cloudfunctions.net/api_sms_send"
DELAY = 0.3 # seconds between messages (adjust to carrier limits)
# ── Your recipient list ────────────────────────────────────────────────────────
recipients = [
{"phone": "+40712000001", "message": "Hi Ana! Your order #1001 has shipped."},
{"phone": "+40712000002", "message": "Hi Dan! Your order #1002 has shipped."},
{"phone": "+40712000003", "message": "Hi Maria! Your appointment is tomorrow at 10:00."},
# … add more rows, load from CSV with csv.DictReader, etc.
]
# ── Bulk send loop ─────────────────────────────────────────────────────────────
results = {"sent": 0, "failed": 0}
for item in recipients:
payload = {
"phoneNumber": item["phone"],
"message": item["message"],
# "webhookUrl": "https://your-server.com/sms-delivery", # optional
}
try:
r = requests.post(
ENDPOINT,
headers={"X-API-Key": API_KEY, "Content-Type": "application/json"},
json=payload,
timeout=10,
)
data = r.json()
if data.get("success"):
print(f"✓ Queued → {item['phone']} | smsId: {data.get('smsId')}")
results["sent"] += 1
else:
print(f"✗ Failed → {item['phone']} | {data}")
results["failed"] += 1
except requests.RequestException as e:
print(f"✗ Error → {item['phone']} | {e}")
results["failed"] += 1
time.sleep(DELAY) # be polite to the API and your carrier
# ── Summary ───────────────────────────────────────────────────────────────────
print(f"\n✅ Done — sent: {results['sent']}, failed: {results['failed']}")
💡 Tip: Load recipients from a CSV file with csv.DictReader, or from a Google Sheet via the Sheets API. Download the full script at ready-to-use.html.
SMS Gateway Master is designed to handle high-volume, automated sending reliably.
Delivery webhooks report failed messages. Implement retry logic in your script to re-send them automatically.
Every message gets an smsId. Track sent / delivered / failed status via webhooks. Log results to a spreadsheet or database.
The Android app uses WorkManager for background processing — messages continue sending even when the app is in the background.
Each recipient can receive a different, personalised message. Build the message string dynamically in your code before sending.
Message content is never stored in the cloud. All SMS route through your own Android device and carrier — no third-party message storage.
Python, PHP, Node.js, Ruby, Bash — any language that can make an HTTP POST request works. Ready-to-use scripts available for all platforms.
"status": "failed". Implement retry logic in your script: collect failed smsIds from webhook callbacks and re-send them. The Python example above can be extended with a retry queue.webhookUrl in each request. The app will POST a delivery status payload for each message: {"smsId": "...", "status": "delivered", "phoneNumber": "+40...", "timestamp": ...}. Log this to a database, Google Sheet, or any system to track delivery rates.7-day free trial. 100 SMS/day. No credit card. €5/month after trial.
Download on Google Play See Pricing