Imagine: a "30% off the entire collection" campaign launches, but the social media post has a typo "3%" or doesn't go live at all. The cost of such an error—lost sales and reputation. We automate publishing promotions to social media: the system tracks schedules, generates banners with current data, and posts at the right time. Evaluate the solution on your project—get a consultation. Our team's experience—over 50 projects in marketing automation. We guarantee stable, failure-free operation.
Contact us—we'll help implement the system and eliminate manual posting.
How to Automate Discount Posting on Social Media?
A promotional post must go live exactly when the campaign starts—not two hours later when a manager remembers, nor yesterday when the campaign hasn't started. We solve this: the system tracks discount schedules and publishes announcements with proper formatting, countdowns, and product links. Automated posting is 5–10 times faster than manual.
Problems We Solve
- Manual posting: managers spend up to 2 hours daily preparing and publishing, often forgetting or making mistakes. Our system eliminates the human factor. Automated posting reduces errors by 10 times.
- Multiple channels: VK, Telegram, Instagram—each API has its nuances: limits, formatting, media requirements. We use a unified abstraction layer on Laravel that standardizes requests.
- Banner generation: a designer spends 5–10 minutes per banner. Puppeteer does it in 1–2 seconds, pulling data from the database. On-the-fly generation is 300 times faster than manual design.
- Promotion end: managers often forget to delete or update posts, misleading customers. Automatic deletion via API solves this.
Comparison of Manual vs. Automated Campaign Management
| Criteria | Manual | Automated |
|---|---|---|
| Time to publish one campaign | 10–20 minutes | 2 minutes |
| Error probability | High (typos, wrong dates) | Low (data from DB) |
| Scaling to 10+ campaigns | Requires hiring a manager | No additional cost |
Why On-the-Fly Banner Generation Is Faster?
Promotional posts often need banners with prices and discount tags—not just product photos. Two approaches:
| Feature | Pre-made banner (manager uploads) | On-the-fly generation (Puppeteer) |
|---|---|---|
| Preparation time | 5–10 minutes per banner | 1–2 seconds per banner |
| Consistency | Depends on designer | 100% identical style |
| Errors | Possible typos, wrong data | Data from database |
| Scalability | Low (manual labor) | High (automated) |
On-the-fly generation is 300 times faster (1–2 seconds vs 5–10 minutes). It reduces design costs by 5 times and provides a fast return on investment.
How the Posting Queue Works
The promotions table stores fields that determine the posting moment:
CREATE TABLE promotions ( id SERIAL PRIMARY KEY, title VARCHAR(255), discount_value NUMERIC(5,2), discount_type ENUM('percent','fixed'), starts_at TIMESTAMP NOT NULL, ends_at TIMESTAMP, social_post_at TIMESTAMP, -- when to publish social_posted BOOLEAN DEFAULT FALSE, notify_before INTERVAL DEFAULT '0', -- e.g., '1 hour' channels JSONB DEFAULT '[]' -- ['vk','telegram'] ); Cron job runs every minute and selects promotions where social_post_at <= NOW() and social_posted = false:
SELECT * FROM promotions WHERE social_post_at <= NOW() AND social_posted = FALSE AND starts_at <= NOW() + notify_before; Found promotions are queued in Redis; after successful posting, social_posted is set to true. The queue allows retrying on temporary API errors.
Handling Temporary API Errors
If a social network API is unavailable (rate limit or temporary outage), the task is re-queued with exponential backoff: after 5 minutes, 15 minutes, then 1 hour. After three failed attempts, a notification is sent via Telegram or email. Retry count and intervals are configurable.
Post Text
The template adapts to the campaign type:
🔥 DISCOUNT {discount}% on {category_name}! {description} ⏰ Offer valid until {ends_at_formatted} 📦 {products_count} products on sale View all products: {promo_url} {hashtags} For campaigns with a promo code, a block is added:
🎁 Promo code: {promo_code} Deleting / Archiving the Post
Some platforms allow deleting a post via API after the campaign ends. For VK—wall.delete, for Telegram—deleteMessage. This feature is optional, enabled by setting auto_delete_after_end = true on the campaign. After deletion, the post is replaced with an expiration notice.
Work Process
- Analysis — We study your current campaign scheme, list of social networks, banner requirements.
- Design — We prepare architecture: tables, queues, templates, integrations.
- Implementation — We write code on Laravel 11 (PHP 8.3), configure Puppeteer, connect social network APIs.
- Testing — We verify posting with various scenarios, load testing, error handling.
- Deployment — We deploy on your server or cloud, set up monitoring.
What's Included
- Full documentation on the system and API.
- Handover of server and social network access.
- Training for managers on CMS operation.
- 1 month warranty support after launch.
Implementation Timeline
Basic system with fixed templates and two channels (VK, Telegram) — 5–7 business days. Banner generation via Puppeteer, post deletion after campaign end, CMS management — another 3–4 days.
Previously, publishing a campaign took 2 hours, now it takes 2 minutes. Data errors disappeared. The system paid for itself in 2 months — client feedback from retail.
Assess your project and we'll suggest the optimal solution—order an automated posting system implementation to forget about manual publishing. Get a consultation today.







