All articles

AI and operations

AI Publishing Workflows: Sources, Review and Release

Build a publisher workflow for approved sources, editorial review and CMS delivery, with provenance, rights records and reliable retry handling.

Planning papers and a phone on a work surface
Illustrative photograph from the original article, sourced from Unsplash.

Automate editorial preparation with a clear source record

A publishing workflow can monitor approved sources, organize reporting material, prepare metadata and move an editor-approved draft into a CMS. Its value comes from reducing repetitive preparation while keeping responsibility for reporting and publication clear.

Begin with your own reporting, licensed material or sources whose permitted uses you have established. An article being accessible online does not make its text or images free to republish. Keep provenance and rights information beside the draft throughout the pipeline.

This guide focuses on source intake, review and CMS delivery. For a broader integration project, see AI systems and automation.

Keep collection, drafting and publication separate

  1. Monitor: receive an approved feed, API event, document or reporting submission.
  2. Record: save source URL, author, date, permitted use and a stable identifier.
  3. Prepare: extract facts for review, suggest categories and draft metadata.
  4. Edit: verify claims, quotations, attribution and publication suitability.
  5. Publish: send the approved revision to the CMS with the correct byline, assets and status.

Use explicit states such as received, needs review, approved and published. A model response must not move a draft directly into publication. Store the editor’s approved revision so a retry cannot substitute an unreviewed generated version.

Monitoring sources for new content

The first stage is knowing when new content exists. You need to define your source list and decide how to watch each source.

RSS feeds are the easiest. Many government agencies, wire services, and news outlets still publish RSS feeds. Your system subscribes to these feeds and checks them on a schedule — every 15 minutes, every hour, or whatever frequency matches your editorial pace. When a new item appears in the feed, the system extracts the URL and passes it to the scraping stage. Python's feedparser library handles RSS parsing in a few lines of code. Node.js has rss-parser. Both are reliable.

For sources without RSS feeds, you need web scraping with change detection. The system loads a web page, extracts the list of articles or press releases, and compares it against what it saw last time. New items get queued for scraping. This comparison can be as simple as storing a list of known URLs in a database and flagging any URL that hasn't been seen before.

Some sources send content via email — PR agencies, government mailing lists, syndication partners. For these, your system monitors a dedicated inbox (Gmail API or IMAP polling) and extracts article content from the email body or attached documents.

The source monitoring layer needs a simple database table: source URL, check frequency, last checked timestamp, and a list of already-processed article URLs. This prevents duplicate processing and gives you a clear audit trail. If you're building on GoHighLevel, the platform's webhook triggers can feed into this monitoring layer for sources that push content to you rather than requiring you to pull it.

Set realistic check frequencies. For breaking news sources, check every 10-15 minutes during business hours. For weekly press release pages, once a day is plenty. Over-polling wastes resources and can get your IP blocked by source sites. Under-polling means you miss time-sensitive content. Most local news operations settle on 15-30 minute intervals for their primary sources.

Extract approved material and detect source changes

Prefer a source’s supported API, feed or licensed delivery mechanism. If HTML extraction is permitted, configure the specific body, headline, date and author fields. Test that the extractor has not captured navigation, advertisements or an unrelated article.

For PDFs, inspect reading order, tables and OCR confidence. Preserve a link to the original document so the editor can check names, numbers and context. Extraction can fail silently; an empty body is not the only failure to detect.

Respect access restrictions and source-specific request limits. Use stored hashes and timestamps to avoid unnecessary retrieval. Alert an operator when the source structure changes rather than publishing a partial extraction.

Prepare drafts without manufacturing reporting

Ask the model for bounded editorial assistance: categorize a document, extract candidate facts with source locations, suggest a headline supported by the draft or summarize your own reporting notes. Preserve uncertainty and attribution.

An example instruction for owned material is: “Identify the central development, list statements needing verification and suggest a headline that the supplied text supports. Do not invent quotations, witnesses, dates or reporting.” The editor still compares the output with the source.

Structured output helps software process a response, but it does not prove factual accuracy. Handle refusals, incomplete output and schema validation failures. See the current OpenAI structured output documentation.

Do not treat lightly rewritten third-party articles as original coverage. Add reporting, explanation or analysis that serves the reader and that the publication can substantiate.

Why human review is non-negotiable

Here's where some publishers get tempted to cut corners. If the AI can process the article, why not publish it directly? Skip the moderation step and you can post content within minutes of it appearing on a source site.

Don't do this. Human editorial review before publishing is non-negotiable, for three reasons.

Accuracy. AI models can misinterpret source material. They occasionally rephrase a sentence in a way that changes its meaning. A press release saying a city council "considered" a new ordinance might become an article saying the council "approved" it. That kind of error damages your credibility with readers and your relationship with local government sources. An editor catches this in 30 seconds. An unsupervised AI won't catch it at all.

Legal exposure. Publishing scraped and reformatted content without editorial review creates legal risk. Copyright claims, defamation liability, and privacy violations all become your problem the moment content goes live on your domain. An editor verifies that the article falls within fair use or your syndication agreement, that quotes are accurately attributed, and that the content doesn't include information that shouldn't be public (sealed court records, juvenile names, victim identities in certain crime categories).

Editorial judgment. Not every press release deserves publication. Not every police report should become a news article. Your editors make judgment calls about newsworthiness, timing, and sensitivity that AI can't replicate. A school district press release about a new reading program might be worth covering. The same district's press release about their new logo probably isn't. These decisions define your publication's editorial identity.

The moderation layer should be a simple web dashboard. Processed articles appear in a queue with their generated headlines, summaries, categories, and the original source link. Editors can approve (publish as-is), edit (modify before publishing), or reject (discard). Each action takes one click plus optional edits. Build this as a lightweight web app using any framework your team is comfortable with — React, Vue, or even a simple server-rendered page.

Track rejection reasons by source and task. Review whether the failure came from extraction, missing evidence or generated wording, then correct that stage. An editor remains responsible for approving publication. For the review interface, see custom software development.

Publishing to WordPress via REST API

The WordPress REST API supports creating and updating posts. Authenticate with an appropriately restricted account, validate the payload and create a draft until the approved publication step.

The publish step takes an approved article from your moderation dashboard and sends a POST request to yoursite.com/wp-json/wp/v2/posts. The request body includes the title, content (as HTML), status (draft or publish), category IDs, tag IDs, and any custom fields your theme requires.

Authentication uses application passwords (built into WordPress since version 5.6) or JWT tokens. Application passwords are simpler to set up: create one in the WordPress admin under Users → Security, and pass it as a Basic Auth header with your API requests.

Categories and tags need to match your WordPress taxonomy. Before creating a post, your system should look up the category ID for "Local Government" or "Public Safety" from the WordPress API. Cache these IDs locally so you're not making extra API calls for every article. If a tag doesn't exist yet, the API can create it on the fly.

Featured images require a two-step process. First, upload the image to the WordPress media library using the /wp/v2/media endpoint. The API returns a media ID. Then set that media ID as the featured_media field on your post. If your AI processing step generates an image search query, you can integrate with Unsplash's API or Pexels to find a relevant royalty-free image, download it, and upload it to WordPress automatically.

For publishers running multiple WordPress sites, the system posts the same article (or variants of it) to each site's API. Each site gets its own API credentials and category mapping. This is where the architecture pays off — the scraping and AI processing happen once, and only the publish step multiplies across sites.

Custom post types and Advanced Custom Fields (ACF) work through the REST API too, though ACF requires the ACF to REST API plugin to expose custom field endpoints. If your theme uses custom fields for bylines, source attribution, or article types, these get included in the API request body.

Test your WordPress integration with draft posts first. Set the post status to "draft" and verify that titles, content formatting, categories, and images all look correct before switching to auto-publish. You don't want to discover a formatting bug after 50 malformed articles have gone live. This kind of staged deployment is central to how we approach automation projects — our process page breaks down how we validate systems before they touch production data.

Running one system across multiple publications

Media companies that operate multiple local news sites get the most value from content automation. Instead of each site's editor independently monitoring the same government press release pages, one system handles all the monitoring, scraping, and AI processing centrally. Each site's editors only see content relevant to their coverage area.

The multi-site architecture adds a routing layer between AI processing and moderation. After the AI categorizes an article by topic and geographic region, the routing layer assigns it to the appropriate site's moderation queue. A county-level press release about road construction goes to the site covering that county. A state-level policy announcement goes to all sites in the state. A school district announcement goes only to the site covering that district's area.

Geographic routing uses a mapping table: source → geographic coverage area → publication. When you add a new source, you tag it with its geographic scope. When you add a new publication, you define its coverage area. The routing logic is just a lookup.

This approach also handles content variants. Some articles need different headlines or ledes for different publications. The AI can generate site-specific variants in the processing step — same facts, different framing for different audiences. A county government budget story might lead with property tax impacts for a residential-focused site and with infrastructure spending for a business-focused one.

Shared moderation across sites is optional. Some media companies prefer a single editorial team reviewing content for all publications. Others give each site's editor their own queue. The system supports both models — it's just a filter on the moderation dashboard.

Poll sources at a frequency permitted by their access terms and justified by the publication’s needs. A queue that produces more drafts than editors can verify creates a backlog rather than a newsroom improvement.

Record licensing and attribution requirements per source, including image rights and any restrictions on AI processing. A subscription may grant reading access without granting automated extraction or republication rights.

The U.S. Copyright Office explains that fair use depends on the circumstances; attribution or changing wording is not a blanket permission to reuse a work. Obtain advice for the publication’s particular rights questions.

Google’s spam policies address scaled content produced primarily to manipulate rankings. Use automation to support useful reporting, and retain the original publication date when merely maintaining an existing article.

Building the system step by step

Here's how to build this from scratch, assuming you have a developer who's comfortable with Python or Node.js.

Week one: Source audit and scraping. List every source your newsroom currently monitors manually. For each source, document the URL, update frequency, content format (HTML article, PDF, RSS feed), and the CSS selectors needed to extract the article body. Build the scraping layer for your top 10 sources. Test each scraper against five real articles to verify the extraction works cleanly.

Week two: AI processing pipeline. Set up the AI processing step. Write your system prompt, defining your publication's style, categories, and output format. Process 20 scraped articles and review the output manually. Refine your prompt based on what the AI gets wrong — headlines too long, categories misassigned, source attribution missing. Iterate until the processing output is good enough that an editor only needs minor tweaks.

Week three: Moderation dashboard and WordPress integration. Build the review interface. This doesn't need to be fancy — a table of pending articles with approve/edit/reject buttons, plus a preview pane showing the article as it will appear on the site. Connect the approve action to the WordPress REST API so approved articles get posted automatically.

Week four: Orchestration and monitoring. Connect all three stages using n8n or Make.com. Set up the scheduling — which sources get checked when. Add error alerting so your team knows when a scraper breaks (source sites redesign, URLs change, rate limits get hit). Run the full pipeline end-to-end and fix whatever breaks.

If you don't have a developer on staff, this is exactly the kind of project we build through our AI systems and automation practice. We handle the technical build and hand off a working system your editorial team can operate independently.

For publishers already using GoHighLevel or similar platforms for their marketing automation, the content pipeline can share infrastructure. Lead capture workflows and content publishing workflows both benefit from the same orchestration tools. Our work with GoHighLevel automation often includes content distribution alongside sales and marketing workflows.

After the initial build, maintenance is light. You'll add new sources as you discover them (30-60 minutes per source for scraper setup). You'll adjust AI prompts when editorial standards change. And you'll fix scrapers when source sites redesign — which happens a few times a year per source, not daily. The system runs in the background, and your editors interact with a clean review queue rather than a pile of browser tabs.

For publishers looking at broader automation beyond content — AI agent development for reader engagement, automated ad sales workflows, subscriber management — the content pipeline is usually the first project because it shows clear ROI and builds confidence in automation across the newsroom.

Ready to stop paying people to copy and paste? Get in touch and we'll scope a content automation system for your operation.

Questions before automating a publication

What should the operating budget include?

Source licenses, CMS and hosting, model usage, extraction and OCR, monitoring, editorial review and maintenance. Test a representative batch before extrapolating monthly costs.

Can the workflow publish automatically?

Use an explicit approval gate for editorial articles. A narrow structured notice may have a different approved process, but it still needs validated source data and a correction route.

What if a source changes its layout?

Stop processing that source, preserve the failed input and alert its owner. Retest the extractor on multiple records before resuming.

Can we process a source behind a login?

Only within authorized access and the applicable license and terms. Store credentials securely and do not infer republication rights from the ability to sign in.

Are government materials always reusable?

No single assumption covers every jurisdiction, agency or embedded third-party asset. Record the rights that apply to the actual material.

Does this replace original reporting?

No. It can organize material and prepare drafts; interviews, verification, context and editorial judgment still need accountable people.

To scope the collection and CMS integrations, explore custom software development.