Stop paying $40–120/month for sermon management platforms. Sermon Importer & Archive does it all — free, self-hosted, inside WordPress.
Most church websites struggle with sermon archives. Either they pay for expensive third-party platforms, embed YouTube playlists that look unprofessional, or ask a volunteer to manually copy sermon details into WordPress every week. None of it works well. All of it takes time nobody has.
Sermon Importer & Archive connects your WordPress site directly to your church’s YouTube channel and handles everything automatically — importing sermons as published posts in the Sermons category (sermons slug; the category is created if missing), organizing them by speaker, scripture, and series, and detecting when you go live so your website can show the stream in real time.
Automatic Sermon Import
Connect your YouTube channel once. The plugin pulls videos from your channel’s uploads playlist using playlistItems.list (not search.list), then creates WordPress posts with title, description, thumbnail, and publish date from YouTube. New sermons can appear on your site automatically — no manual entry, no copy-paste, no volunteer hours wasted.
Smart Title Parsing
Designed for real church naming conventions. The parser extracts sermon title, speaker name, scripture reference, Bible book, and series name from your video titles automatically. Other churches may need naming consistency or parser tuning over time.
Live Stream Detection
When your service starts, your website can know. The live detector uses a two-request pattern (playlistItems.list + videos.list, up to 2 API quota units when the server actually refreshes live status from YouTube), only inside configurable windows around your Service Times. Outside those windows, no YouTube calls are made for live status (and cached answers may use 0 units). Results are cached in a transient (shorter TTL while live). The stream UI can switch when service ends — no volunteer flipping a switch.
Quota-Conscious YouTube API Design
Your API quota is treated as a resource to steward. Imports use the uploads playlist pattern above; live checks avoid hammering the API and include guards such as actualEndTime so finished broadcasts are not mistaken for live. The REST live-status endpoint supports a rate-limited refresh and sends Cache-Control: no-store so CDNs and browsers do not cache stale “live” states.
Filterable Sermon Archive
Visitors can filter your sermon library by speaker, Bible book, series, and year. The archive works with popular WordPress themes and search plugins out of the box.
Speaker, Book & Series Taxonomies
Sermons are organized into custom taxonomies on the post type (servantly_si_sermon_speaker, servantly_si_sermon_book, servantly_si_sermon_series), REST-visible, with rewrite slugs sermon-speaker, sermon-book, sermon-series. Bulk & titles merges duplicate terms and can optionally map YouTube titles split by a delimiter to sermon fields on import.
Curated Content Protection
Lock individual sermon posts to prevent auto-import from overwriting your manual edits. The importer skips creating duplicates when sermon_video_id already exists. Unlocked posts can be refreshed on re-import; locked posts (_sermon_locked) are not overwritten.
Service Times Configuration
Configure your recurring service times once. The plugin uses them to gate live detection, power the homepage countdown to next service, and give visitors accurate schedule context.
Homepage Sermon Hero
The [servantly_latest_sermon] shortcode outputs a sermon hero — latest sermon embed, countdown to next service, live detection, and a grid of recent messages. Optional shortcode attributes: label (eyebrow text), sermons_url (defaults to home_url( '/sermons/' ) — your site’s front URL plus the /sermons/ path; override if your archive lives elsewhere).
Watch Online Page
The [servantly_watch] shortcode creates a Watch Online experience: live embed when streaming (with a LIVE treatment), otherwise latest sermon, plus a recent grid. Hero “Play Now” and live links resolve to Settings Watch online page URL when set, otherwise the most recently updated published page/post that contains [servantly_watch], otherwise home_url( '/watch/' ). Optional shortcode attribute watch_url on [servantly_latest_sermon] overrides per hero. Front-end JavaScript can swap the player without a full page reload when status changes.
The plugin adds a single admin menu, Sermon Importer, with tabs (not separate submenus):
page-sermons.php supplied by the plugin) for the page that should render the full archive experience.[servantly_latest_sermon] and [servantly_watch] as described above. Styles and scripts live under the plugin’s assets/ directory.Read-only routes under the namespace servantly-si/v1 (public by design for the archive and watch UI):
GET /wp-json/servantly-si/v1/sermons — Paginated sermons with query args such as speaker, book, series, year, sort, page.GET /wp-json/servantly-si/v1/filters — Filter option payloads for the UI.GET /wp-json/servantly-si/v1/live-status — Live/offline payload; optional refresh respects a short server-side cooldown.Live-status responses use Cache-Control: no-store so caching layers do not serve stale live states.
When auto-import runs via WP-Cron and creates new sermon posts, the plugin automatically purges the page cache across all major caching plugins and hosting environments — but only when new posts are actually created (imports that find nothing new never touch the cache).
Supported out of the box (no configuration needed):
If you use a caching plugin not listed here, hook into the servantly_si_after_cache_purge action to add your own purge call:
add_action( 'servantly_si_after_cache_purge', 'my_custom_cache_purge' );
Configurable. Under Sermon Importer Settings Comments & discussions, choose whether WordPress should leave comments alone (default), disable them only on sermon posts (posts in the Sermons category or with a stored YouTube sermon_video_id), or disable them sitewide (and hide the Comments admin menu / admin bar node — the original single-purpose church behavior). No option deletes existing comment rows; sitewide or sermon-only modes simply prevent new comments/pings where applied.
Functionally you need your own YouTube channel ID, API key, and service times. Shortcode names use the original plugin slug for backward compatibility; title parsing is tuned for common church patterns — adjust YouTube titles or extend parsing if your naming differs.
Any church or ministry that:
* Publishes sermons to YouTube
* Wants a professional sermon archive on their WordPress site
* Streams live services on YouTube
* Is tired of paying monthly fees for sermon management platforms
* Has a volunteer managing the website who needs something that runs itself
This plugin was built for our own church and given to the broader church and ministry community at no cost. There is no paid Pro version of Sermon Importer, no feature locks, and no upgrade wall for sermon or archive features. The admin may include an optional Protect Your Church tab pointing to WhoKnew Shield (that tab hides automatically when WhoKnew Shield Pro is active with a valid or grace-period license). If it helps your church, that is enough.
Coding standard configuration: phpcs.xml.dist in the plugin root (next to servantly-sermon-importer.php) in source control — it is omitted from distribution ZIPs built for upload. With PHP_CodeSniffer available in your environment, from a checkout of that directory run phpcs (or phpcs --standard=phpcs.xml.dist).
Protect your church website’s contact information. Staff email addresses, office phone numbers, and your building’s physical address are harvested by spam bots every day — the same bots that enable phishing attacks, robocalls, and junk mail. WhoKnew Shield™ protects all of it automatically, with zero configuration. Free version available.
This plugin is part of the Servantly suite — free, open-source WordPress plugins built for nonprofit organizations and ministries. For more information and additional free software, visit servantly.org.
WhoKnew.io — whoknew.io
This plugin connects to the following third-party services. Your WordPress server makes these requests — not your visitors’ browsers, except for embedded iframes and scripture links noted below.
What it is: Google’s YouTube Data API, used to retrieve sermon videos from your connected YouTube channel.
What data is sent and when:
playlistItems.list), checks for an active live stream (videos.list), or resolves a non-standard channel ID to its uploads playlist (channels.list). These requests originate from your WordPress server.YouTube embed iframes: The Watch Online page and single sermon pages display YouTube video players via youtube.com/embed/… iframes. These load in the visitor’s browser and are governed by YouTube’s own cookie, tracking, and autoplay policies.
What it is: An optional feature. When Scripture Links is enabled in Settings, displayed scripture references become clickable links that open the corresponding passage on Bible.com in a new tab. No data is sent to Bible.com by your server; the link simply directs the visitor’s browser to the passage URL.
This plugin does not send any data to WhoKnew.io servers. The optional Protect Your Church admin tab contains static promotional links only.