Blog management and multi-channel publishing

Pressroom supports scraping existing blog content, importing content from files or text, and publishing across multiple channels including Medium, Slack, and...

Blog management and multi-channel publishing

Pressroom supports scraping existing blog content, importing content from files or text, and publishing across multiple channels including Medium, Slack, and Dev.to.

Blog scraping and import

Scrape an existing blog

Import posts from an existing blog into Pressroom’s content library:

POST /api/blog/scrape
{"url": "https://blog.example.com"}

The scraper crawls the blog, extracts posts (title, body, date, author), and stores them. Scraped posts serve as:

  • Voice training data — Examples of your existing writing style
  • Content library — Reference material for future generation
  • Performance baselines — When combined with GSC data, shows what’s working

List blog posts

GET /api/blog/posts?limit=50

Delete a blog post

DELETE /api/blog/posts/{post_id}

Content import

Import content from text or files without scraping a live blog.

Paste import

POST /api/import/paste
{
  "text": "Your article content here...",
  "title": "Article Title",
  "channel": "blog"
}

File import

POST /api/import/file

Upload a file via multipart form data. Supported formats: .txt, .md, .html, .docx.

Import templates

GET /api/import/templates

Returns structured templates for bulk content import.

Medium publishing

Publish content items to Medium as drafts:

POST /api/medium/publish
{"content_id": 42, "publish_status": "draft"}

Content is published as a Medium draft, giving you a chance to review formatting before going live. Requires a Medium integration token configured in Settings > Integrations.

Slack notifications

Push content updates to Slack channels for team visibility.

Test connection

POST /api/slack/test

Sends a test message to verify the Slack webhook is working.

Notify for a specific item

POST /api/slack/notify/{content_id}

Sends a Slack message with the content item’s headline, channel, and status.

Notify the queue

POST /api/slack/notify-queue

Pushes a summary of the current content queue to Slack — useful as a daily digest or after a pipeline run.

Multi-channel publishing workflow

Pressroom generates content for multiple channels simultaneously. A typical multi-channel workflow:

1. Generate across channels

POST /api/pipeline/generate
{"channels": ["linkedin", "blog", "devto", "newsletter", "x_thread", "release_email", "yt_script", "github_gist"]}

2. Review in the queue

Each channel gets its own content item with format-appropriate output. Review, edit, and approve per channel.

3. Publish to connected platforms

POST /api/publish

Content routes to the correct platform based on channel:

ChannelDestination
linkedinLinkedIn (via OAuth)
devtoDev.to (via API)
blogConnected blog platform / HubSpot CMS
facebookFacebook page (via OAuth)
release_emailEmail draft for sending
newsletterEmail draft (digest format)
yt_scriptYouTube (via video studio)
github_gistGitHub Gist (via team member’s account)

4. Notify the team

POST /api/slack/notify-queue

5. Publish to Medium

POST /api/medium/publish
{"content_id": 42, "publish_status": "draft"}

Medium publishing is separate from the main publish flow since it creates drafts for manual review.

Channel skills

Pressroom includes 8 channel-specific generation templates in skills/channels/. These templates define the format, length, tone, and structure for each output channel:

SkillChannelOutput
channel_linkedinLinkedInProfessional post with hook (200-300 words)
channel_devtoDev.toTechnical article with frontmatter
channel_blogBlogLong-form article with headers (800-1500 words)
channel_newsletterNewsletterDigest format (500-800 words)
channel_x_threadX/TwitterThread of short posts (3-5 tweets)
channel_github_gistGitHub GistTechnical gist with explanation
channel_release_emailEmailEmail template with subject line (300-500 words)
channel_yt_scriptYouTubeScript with hook, sections, lower thirds

Channel skills are wired into the generation pipeline and invoked automatically based on the requested channels.

Content performance tracking

After publishing, track how content performs on LinkedIn and Dev.to:

List all published performance

GET /api/content/published/performance

Get performance for a specific item

GET /api/content/{content_id}/performance

Fetch fresh metrics

POST /api/content/{content_id}/fetch-performance

Triggers a fresh pull of metrics (views, likes, comments, shares) from the publishing platform.

Performance data helps identify what resonates with your audience and feeds back into content generation decisions.

Brand scraping

Auto-discover brand assets from a domain crawl:

POST /api/brand/scrape
{"domain": "example.com"}

Returns discovered logos, brand colors, fonts, and social links. Brand assets are used in video rendering (chyrons, overlays) and content formatting.

Crawl a specific brand page

POST /api/brand/crawl-target
{"url": "https://example.com/brand", "type": "brand_page"}

View brand data

GET /api/brand/{org_id}