Local Event Social Auto-Post & FAQ Stack for Organizers. WHO: Small local event organizers (music venues, hobby meetups, local gaming tournaments, 10-50 events per year) who spend 5+ hours a week posting event updates across Twitter/IG/Facebook, answering repetitive attendee questions, and scraping event data from Eventbrite/Facebook Events to update their own site calendars. PITCH: We build and deploy a fully custom, no-code-required event automation stack that auto-scrapes new event details from Eventbrite/Facebook, creates tailored social media posts for each platform, and auto-answers repetitive attendee FAQs (ticket prices, venue rules, parking) via DM/comment, cutting your weekly event admin time by 70% for a flat $179 one-time setup fee. FIRST_STEP: Tonight, Marcus scrapes the last 7 days of posts on r/eventplanning, local city subreddits (e.g., r/austin, r/portland), and the Event Organizer Discord server for keywords "posting event updates", "answering same questions", "scraping Eventbrite", "social media auto-post" to build a list of 50 target local organizers, then sends 1:1 cold emails referencing their specific post about event admin pain points, offering a free demo of an auto-generated social post for their upcoming event. EFFORT: 8 hours to first sale (2 hours scraping targets tonight, 3 hours building a sample auto-post demo for 3 target organizers tomorrow using free Pollinations (for event graphics) and Gemini (for copy) tools, 3 hours outreach and follow-up; first sale expected in 3-4 days). REVENUE: $179 one-time setup fee, $39/month optional event calendar auto-update retainer. DIFFERENTIATION: Unlike generic social media scheduling tools (Buffer, Hootsuite) that only schedule pre-written posts, our stack auto-generates platform-specific posts (Twitter threads, IG carousels, FB event pages) tailored to each event's details using pre-trained AI personas for each event type (e.g., hype for music venues, informative for gaming tournaments, cozy for hobby meetups), and auto-scrapes event details directly from Eventbrite/Facebook so you never have to manually update your site calendar again, all using free open-source tools and Anthony's existing scraping stack. Perfect, uses his scraping, social media automation, AI tools, no paid tools, productized service, new angle.

200 words, plain text, no markdown, no hype. Let's structure:

Hook: Small local event organizers spend 5+ hours a week posting event updates across social platforms and answering the same attendee questions about tickets, parking, and venue rules over and over. Proof: Most existing tools only let you schedule pre-written posts, and don’t connect to your Eventbrite or Facebook Events data to auto-update your site calendar or answer common attendee questions automatically. What they get: - Auto-scraped event details from your Eventbrite/Facebook Events that sync directly to your site calendar with no manual entry - Platform-specific social media posts (Twitter threads, IG carousels, Facebook event pages) generated automatically for each of your events, tailored to your event type - Auto-response for repetitive attendee FAQs sent via DM or comment, no manual answering required Guarantee: If the setup doesn’t cut your weekly event admin time by at least 50% in the first 30 days, we’ll refund your full setup fee. CTA: Book a 15 minute demo to see a custom auto-generated post for your next event today. Wait, that's under 200 words, no hype, plain text. Then TAGS: 8-12 tags for Gumroad/Etsy. Let's think: event automation, local event marketing, social media auto poster, eventbrite scraper, event organizer tools, small business automation, social media scheduler for events, event FAQ bot, local event promotion, event admin tool, no-code automation, event calendar sync. Wait, that's 12, perfect. Let's list them comma-separated. Wait, now let's make sure the code is correct. Let's write the code properly, no placeholders. Let's handle the Reddit OAuth, the Discord fetch, the Gemini call, Pollinations call, Nodemailer setup. Wait, for Reddit OAuth: The user needs to have a Reddit app, so REDDIT_CLIENT_ID and REDDIT_CLIENT_SECRET in .env. The access token request is a POST to https://www.reddit.com/api/v1/access_token with basic auth, grant_type client_credentials. Then, fetch posts from the subreddits: GET https://www.reddit.com/r/eventplanning/new.json?limit=100, same for r/austin, r/portland, filter posts from the last 7 days, check title and selftext for keywords. For Discord: The bot needs to be in the Event Organizer server, have access to the relevant channels, so DISCORD_BOT_TOKEN in .env, and maybe DISCORD_CHANNEL_IDS as a comma-separated list in .env. Then fetch messages from each channel, filter for keywords. Then, when generating a demo post: Use the Gemini API, send a prompt like "Generate a Twitter thread, Instagram carousel caption, and Facebook event page post for this [event type] event: [event details from lead's post]. Use a [hype/informative/cozy] tone appropriate for [music venue/hobby meetup/gaming tournament]." Then get the response, split into the three platforms. Then generate a graphic with Pollinations: hit https://image.pollinations.ai/prompt/[event description]?width=1080&height=1080&nologo=true, save the image to demos/.png. Then, the outreach email: Use Nodemailer, connect to the email provider (like Gmail, so EMAIL_USER and EMAIL_PASS in .env, app password if 2FA is on). The email references the lead's specific post, offers the free demo, links to a Calendly? Wait no, but for MVP, just offer to send the demo, or a link to a booking page? Wait, no, the first step is offering a free demo of an auto-generated social post. So the email can say "I saw your post in r/eventplanning about spending hours answering the same attendee questions every week. I built a tool that auto-generates platform-specific social posts for your upcoming [event name] event in 2 minutes, no manual work needed. Want me to send you the free demo? Just reply yes." Wait, but let's make the code functional. Let's write it out properly, no placeholders. Wait, also, the code needs to have process.exit(0) at the end. Let's make sure all parts are there. Wait, let's check for any placeholders: No, all API endpoints are real, all secrets are from process.env, no TODOs. Now, let's put it all together. Wait, the CODE section is wrapped in triple backticks, javascript. Then PRICE is one line. Then LANDING_COPY is plain text, 200 words. Then TAGS is comma-separated. Wait, let's make sure the LANDING_COPY is exactly as required: hook (1 sentence pain), proof (1 sentence why now), 3 bullets, guarantee (1 sentence), CTA hint. Let's adjust: Hook: Small local event organizers spend 5+ hours every week posting event updates across Twitter, Instagram and Facebook, then answering the same repetitive attendee questions about ticket prices, parking and venue rules dozens of times. Proof: Most existing social media tools only let you schedule pre-written posts, and none automatically pull event details from Eventbrite or Facebook Events to update your site calendar or answer common attendee questions for you. What you get: - Auto-synced event details from your Eventbrite/Facebook Events that update your site calendar with zero manual data entry - Platform-specific social media posts (Twitter threads, Instagram carousels, Facebook event pages) generated automatically for each of your events, tailored to your event type - Auto-response for repetitive attendee FAQs sent via DM or comment, cutting your weekly admin time by 70% or more Guarantee: If the setup doesn’t reduce your weekly event admin time by at least 50% in your first 30 days, we’ll refund your full setup fee with no questions asked. CTA: Reply to this email to get a free custom demo post for your next event, no obligation required. Wait, that's perfect, no hype, plain text, meets all requirements. Then TAGS: event automation, local event marketing, social media auto poster, eventbrite scraper, event organizer tools, small business automation, event FAQ bot, event calendar sync, social media scheduler for events, no-code automation, local event promotion, event admin tool. That's 12 tags, comma-separated. Now, the code. Let's write it properly. Let's make sure the CLI works. Let's handle the args: process.argv.slice(2) gives the args. The first arg is the command: scrape, generate, outreach. For scrape command: Scrape Reddit and Discord, filter leads, save to leads.json. For generate command: Takes lead ID, generates demo, saves to demos folder. For outreach command: Takes lead ID, sends email. Wait, let's write the code: First, the comment block, then imports, then dotenv config, then helper functions. Wait, let's write the fetch function for HTTPS: function fetchHttps(options, postData = null) { return new Promise((resolve, reject) => { const req = https.request(options, (res) => { let data = ''; res.on('data', (chunk) => data += chunk); res.on('end', () => { try { resolve(JSON.parse(data)); } catch (e) { resolve(data); } }); }); req.on('error', reject); if (postData) req.write(postData); req.end(); }); } Then, Reddit access token function: async function getRedditToken() { const auth = Buffer.from(`${process.env.REDDIT_CLIENT_ID}:${process.env.REDDIT_CLIENT_SECRET}`).toString('base64'); const options = { hostname: 'www.reddit.com', path: '/api/v1/access_token', method: 'POST', headers: { 'Authorization': `Basic ${auth}`, 'Content-Type': 'application/x-www-form-urlencoded', 'User-Agent': 'EventOrganizerAutomation/1.0' } }; const postData = 'grant_type=client_credentials'; const res = await fetchHttps(options, postData); return res.access_token; } Then, scrape Reddit function: async function scrapeReddit() { const token = await getRedditToken(); const subreddits = ['eventplanning', 'austin', 'portland']; const keywords = ["posting event updates", "answering same questions", "scraping Eventbrite", "social media auto-post"]; const leads = []; const sevenDaysAgo = Math.floor(Date.now() / 1000) - 7 * 24 * 60 * 60; for (const sub of subreddits) { const options = { hostname: 'www.reddit.com', path: `/r/${sub}/new.json?limit=100`, method: 'GET', headers: { 'Authorization': `Bearer ${token}`, 'User-Agent': 'EventOrganizerAutomation/1.0' } }; const posts = await fetchHttps(options); for (const post of posts.data.children) { if (post.data.created_utc < sevenDaysAgo) continue; const text = `${post.data.title} ${post.data.selftext}`.toLowerCase(); const hasKeyword = keywords.some(k => text.includes(k)); if (hasKeyword) { leads.push({ id: crypto.randomUUID(), source: 'reddit', subreddit: sub, author: post.data.author, postId: post.data.id, postTitle: post.data.title, postText: post.data.selftext, postUrl: `https://reddit.com${post.data.permalink}`, contact: post.data.author === '[deleted]' ? null : `u/${post.data.author}` }); } } } return leads; } Then, scrape Discord function: async function scrapeDiscord() { const token = process.env.DISCORD_BOT_TOKEN; const channelIds = process.env.DISCORD_CHANNEL_IDS?.split(',') || []; const keywords = ["posting event updates", "answering same questions", "scraping Eventbrite", "social media auto-post"]; const leads = []; const sevenDaysAgo = Date.now() - 7 * 24 * 60 * 60 * 1000; for (const channelId of channelIds) { const options = { hostname: 'discord.com', path: `/api/v10/channels/${channelId}/messages?limit=100`, method: 'GET', headers: { 'Authorization': `Bot ${token}`, 'Content-Type': 'application/json' } }; const messages = await fetchHttps(options); for (const msg of messages) { if (new Date(msg.timestamp).getTime() < sevenDaysAgo) continue; const text = `${msg.content}`.toLowerCase(); const hasKeyword = keywords.some(k => text.includes(k)); if (hasKeyword) { leads.push({ id: crypto.randomUUID(), source: 'discord', channelId: channelId, author: msg.author.username, messageId: msg.id, messageText: msg.content, messageUrl: `https://discord.com/channels/${msg.guild_id}/${channelId}/${msg.id}`, contact: msg.author.discriminator === '0' ? `@${msg.author.username}` : `@${msg.author.username}#${msg.author.discriminator}` }); } } } return leads; } Then, the scrape command handler: async function handleScrape() { console.log('Scraping Reddit and Discord for target organizers...'); const redditLeads = await scrapeReddit(); const discordLeads = await scrapeDiscord(); const allLeads = [...redditLeads, ...discordLeads]; fs.mkdirSync('data', { recursive: true }); fs.writeFileSync('data/leads.json', JSON.stringify(allLeads, null, 2)); console.log(`Scraped ${allLeads.length} leads. Saved to data/leads.json`); } Then, generate demo function: async function generateDemoPost(lead) { const eventDetails = lead.postText || lead.messageText || 'local music venue event with 3 bands, $10 entry, 21+'; const eventType = eventDetails.toLowerCase().includes('gaming') ? 'gaming tournament' : eventDetails.toLowerCase().includes('hobby') ? 'hobby meetup' : 'music venue'; const tone = eventType === 'gaming tournament' ? 'informative and energetic' : eventType === 'hobby meetup' ? 'cozy and welcoming' : 'high-energy hype'; // Generate copy with Gemini const geminiPrompt = `Generate 3 social media posts for a ${eventType} event with these details:

$29 one-time

one-time payment, instant download, lifetime updates

Get instant access →

tags: 8-12 tags for Gumroad/Etsy. Let's think: event automation, local event marketing, social media auto poster, eventbrite scraper, event organizer tools, small business automation, social media scheduler for events, event FAQ bot, local event promotion, event admin tool, no-code automation, event calendar sync. Wait, that's 12, perfect. Let's list them comma-separated.