Title: Servantly Sermon Archive with YouTube Import and Live Detection
Author: WhoKnew.io
Published: <strong>May 11, 2026</strong>
Last modified: July 9, 2026

---

Search plugins

![](https://ps.w.org/servantly-sermon-importer/assets/banner-772x250.png?rev=3528954)

![](https://ps.w.org/servantly-sermon-importer/assets/icon.svg?rev=3528884)

# Servantly Sermon Archive with YouTube Import and Live Detection

 By [WhoKnew.io](https://profiles.wordpress.org/whoknewio/)

[Download](https://downloads.wordpress.org/plugin/servantly-sermon-importer.2.1.12.zip)

 * [Details](https://vec.wordpress.org/plugins/servantly-sermon-importer/#description)
 * [Reviews](https://vec.wordpress.org/plugins/servantly-sermon-importer/#reviews)
 *  [Installation](https://vec.wordpress.org/plugins/servantly-sermon-importer/#installation)
 * [Development](https://vec.wordpress.org/plugins/servantly-sermon-importer/#developers)

 [Support](https://wordpress.org/support/plugin/servantly-sermon-importer/)

## Description

**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.

#### What It Does

**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.

#### Admin Screen (Sermon Importer)

The plugin adds a single admin menu, **Sermon Importer**, with tabs (not separate
submenus):

 * **Manage Sermons** — Paginated list, inline editing, media-library thumbnails,
   lock/unlock, AJAX save.
 * **Import** — Manual **Import latest** vs **Import full channel**; on-screen quota
   notes; warns with a link to **Settings** if the key or channel ID is missing.
 * **Auto-Import** — WP-Cron runs **hourly**. When the current **weekday and hour**
   match slots you configure (up to **two distinct hours per day**), a **recent-
   only** import runs and a summary is stored for the tab.
 * **Service Times** — Recurring times for live-detection windows and countdown 
   context.
 * **Settings** — YouTube API key, channel ID, **comments policy** (default: leave
   WordPress unchanged; optional sermon-only or sitewide), sermon page styling, 
   scripture links to Bible.com, hero label, optional **Watch online page URL** (
   hero / live links), speaker options.
 * **Bulk & titles** — Merge duplicate taxonomy terms; optional delimiter-based **
   YouTube title  fields** mapping for imports (with live preview).
 * **API log** — Recent failures with HTTP codes, messages, and pretty-printed JSON
   bodies (API keys redacted in storage).
 * **Protect Your Church** tab — omitted when **WhoKnew Shield Pro** is active with
   a valid or grace-period license (no upsell noise for existing customers).

#### Front End: Template & Shortcodes

 * **Page template:** In the block or classic editor, choose the **Sermon Archive**
   template (`page-sermons.php` supplied by the plugin) for the page that should
   render the full archive experience.
 * **Shortcodes:** `[servantly_latest_sermon]` and `[servantly_watch]` as described
   above. Styles and scripts live under the plugin’s `assets/` directory.

#### REST API

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.

#### Caching Plugin Compatibility

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):**

 * SiteGround Speed Optimizer
 * WP Rocket
 * LiteSpeed Cache
 * W3 Total Cache
 * WP Super Cache
 * WP Fastest Cache
 * Autoptimize
 * Breeze (Cloudways)
 * Hummingbird (WPMU Dev)
 * Cachify
 * Comet Cache / ZenCache
 * Swift Performance Lite & Pro
 * Kinsta MU Cache
 * Nginx Helper

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' );
    ```

#### Comments & Pings

**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.

#### Customizing for Another Church

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.

#### Who This Is For

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

#### See It Live

Built for and running at [Calvary Chapel Lake Arrowhead](https://calvarycla.org/):

 * [Sermon archive](https://calvarycla.org/sermons/) — filterable teaching library
   by speaker, book, series, and year
 * [Watch Online page](https://calvarycla.org/watch/) — live stream detection with
   recent sermon grid
 * Homepage sermon hero — powered by the `[servantly_latest_sermon]` shortcode

#### Free. Forever.

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.

#### Development

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](https://github.com/PHPCSStandards/PHP_CodeSniffer)
available in your environment, from a checkout of that directory run `phpcs` (or`
phpcs --standard=phpcs.xml.dist`).

#### Also Recommended

**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™](https://wordpress.org/plugins/whoknew-shield/)
protects all of it automatically, with zero configuration. Free version available.

#### More Free Tools for Nonprofits & Ministries

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](https://servantly.org).

#### Credits

**WhoKnew.io** — [whoknew.io](https://whoknew.io)

### External Services

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.

#### YouTube Data API v3 (Google LLC)

**What it is:** Google’s YouTube Data API, used to retrieve sermon videos from your
connected YouTube channel.

**What data is sent and when:**

 * Your YouTube channel ID and API key are sent to Google’s servers each time the
   plugin fetches your uploads playlist (`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.
 * Live-stream checks only occur during configurable windows around your saved **
   Service Times** — no YouTube API requests are made outside those windows.
 * Sermon data returned by the API (titles, descriptions, thumbnails, publish dates,
   video IDs) is stored in your WordPress database.

**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.

 * [YouTube Terms of Service](https://www.youtube.com/t/terms)
 * [YouTube API Services Terms of Service](https://developers.google.com/youtube/terms/api-services-terms-of-service)
 * [Google Privacy Policy](https://policies.google.com/privacy)

#### Bible.com (YouVersion / Life.Church)

**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.

 * [Bible.com Terms of Service](https://www.bible.com/terms)
 * [Bible.com Privacy Policy](https://www.bible.com/privacy)

#### WhoKnew™ (plugin author)

This plugin does **not** send any data to WhoKnew.io servers. The optional **Protect
Your Church** admin tab contains static promotional links only.

 * [WhoKnew™ Terms of Service](https://whoknew.io/terms/)
 * [WhoKnew™ Privacy Policy](https://whoknew.io/privacy/)

## Screenshots

[⌊Homepage sermon hero — [servantly_latest_sermon] shortcode output⌉⌊Homepage sermon
hero — [servantly_latest_sermon] shortcode output⌉[

Homepage sermon hero — [servantly_latest_sermon] shortcode output

[⌊Sermon archive page — built-in page template with filterable library⌉⌊Sermon archive
page — built-in page template with filterable library⌉[

Sermon archive page — built-in page template with filterable library

[⌊Single sermon page with video embed, description, and scripture reference⌉⌊Single
sermon page with video embed, description, and scripture reference⌉[

Single sermon page with video embed, description, and scripture reference

[⌊Single sermon page with study guide sidebar open — custom button label and HTML
resource⌉⌊Single sermon page with study guide sidebar open — custom button label
and HTML resource⌉[

Single sermon page with study guide sidebar open — custom button label and HTML 
resource

[⌊Teaching library with filterable dropdowns for speaker, book, series, and year⌉⌊
Teaching library with filterable dropdowns for speaker, book, series, and year⌉[

Teaching library with filterable dropdowns for speaker, book, series, and year

[⌊Watch Online page with live stream detection active — [servantly_watch] shortcode
output⌉⌊Watch Online page with live stream detection active — [servantly_watch] 
shortcode output⌉[

Watch Online page with live stream detection active — [servantly_watch] shortcode
output

[⌊Manage Sermons tab — description row expanded showing meta description and content
editor⌉⌊Manage Sermons tab — description row expanded showing meta description and
content editor⌉[

Manage Sermons tab — description row expanded showing meta description and content
editor

[⌊Manage Sermons tab — resources row expanded with HTML content entered⌉⌊Manage 
Sermons tab — resources row expanded with HTML content entered⌉[

Manage Sermons tab — resources row expanded with HTML content entered

[⌊Import tab — connected channel ID with manual Import Latest and Import Full Channel
buttons⌉⌊Import tab — connected channel ID with manual Import Latest and Import 
Full Channel buttons⌉[

Import tab — connected channel ID with manual Import Latest and Import Full Channel
buttons

[⌊Auto-Import tab — enabled with weekly schedule configured and last run status⌉⌊
Auto-Import tab — enabled with weekly schedule configured and last run status⌉[

Auto-Import tab — enabled with weekly schedule configured and last run status

[⌊Service Times tab — recurring service times entered with YouTube live detection
window settings⌉⌊Service Times tab — recurring service times entered with YouTube
live detection window settings⌉[

Service Times tab — recurring service times entered with YouTube live detection 
window settings

[⌊Service Times tab — live checks running with latest live probe results displayed⌉⌊
Service Times tab — live checks running with latest live probe results displayed⌉[

Service Times tab — live checks running with latest live probe results displayed

[⌊Settings tab — YouTube API key, channel ID, sermon page background color, scripture
links translation, and homepage hero label⌉⌊Settings tab — YouTube API key, channel
ID, sermon page background color, scripture links translation, and homepage hero
label⌉[

Settings tab — YouTube API key, channel ID, sermon page background color, scripture
links translation, and homepage hero label

[⌊Settings tab — Watch online page URL, live chat toggle, speaker name options, 
meta description source, teaching library speaker order, comments policy, and front-
end color palette⌉⌊Settings tab — Watch online page URL, live chat toggle, speaker
name options, meta description source, teaching library speaker order, comments 
policy, and front-end color palette⌉[

Settings tab — Watch online page URL, live chat toggle, speaker name options, meta
description source, teaching library speaker order, comments policy, and front-end
color palette

[⌊Settings tab — archive page labels, download button labels, and load more button
customization⌉⌊Settings tab — archive page labels, download button labels, and load
more button customization⌉[

Settings tab — archive page labels, download button labels, and load more button
customization

[⌊Settings tab — All Sermons button style, live stream cache controls, and shortcode
setup guide for archive, hero, and Watch page⌉⌊Settings tab — All Sermons button
style, live stream cache controls, and shortcode setup guide for archive, hero, 
and Watch page⌉[

Settings tab — All Sermons button style, live stream cache controls, and shortcode
setup guide for archive, hero, and Watch page

[⌊Bulk & Titles tab — Tool 1: merge duplicate taxonomy terms⌉⌊Bulk & Titles tab —
Tool 1: merge duplicate taxonomy terms⌉[

Bulk & Titles tab — Tool 1: merge duplicate taxonomy terms

[⌊Bulk & Titles tab — Tool 3: auto-merge duplicate taxonomy terms⌉⌊Bulk & Titles
tab — Tool 3: auto-merge duplicate taxonomy terms⌉[

Bulk & Titles tab — Tool 3: auto-merge duplicate taxonomy terms

[⌊Bulk & Titles tab — Tool 2: delimiter-based YouTube title to sermon fields mapping
with live preview⌉⌊Bulk & Titles tab — Tool 2: delimiter-based YouTube title to 
sermon fields mapping with live preview⌉[

Bulk & Titles tab — Tool 2: delimiter-based YouTube title to sermon fields mapping
with live preview

[⌊Design tab — layout selector for single sermon page, homepage hero shortcode, 
and sermon archive page⌉⌊Design tab — layout selector for single sermon page, homepage
hero shortcode, and sermon archive page⌉[

Design tab — layout selector for single sermon page, homepage hero shortcode, and
sermon archive page

[⌊Design tab — sermon description style selector and color palette presets with 
individual color overrides⌉⌊Design tab — sermon description style selector and color
palette presets with individual color overrides⌉[

Design tab — sermon description style selector and color palette presets with individual
color overrides

[⌊Design tab — individual color overrides for backgrounds, surfaces, typography,
badges, overlays, and Watch page elements⌉⌊Design tab — individual color overrides
for backgrounds, surfaces, typography, badges, overlays, and Watch page elements⌉[

Design tab — individual color overrides for backgrounds, surfaces, typography, badges,
overlays, and Watch page elements

[⌊Homepage sermon hero — [servantly_latest_sermon] shortcode output with live stream
active⌉⌊Homepage sermon hero — [servantly_latest_sermon] shortcode output with live
stream active⌉[

Homepage sermon hero — [servantly_latest_sermon] shortcode output with live stream
active

[⌊Watch Online page — [servantly_watch] shortcode with a live sermon in progress⌉⌊
Watch Online page — [servantly_watch] shortcode with a live sermon in progress⌉[

Watch Online page — [servantly_watch] shortcode with a live sermon in progress

[⌊Watch Online page — live sermon in progress with the YouTube live chat panel open⌉⌊
Watch Online page — live sermon in progress with the YouTube live chat panel open⌉[

Watch Online page — live sermon in progress with the YouTube live chat panel open

## Installation

**Setup takes about five minutes.** After you activate the plugin, open **Sermon
Importer  Settings**. The admin screen walks you through **API Key** and **Channel
ID** in order, with **the same direct links** to Google Cloud Console (project, 
enable **YouTube Data API v3**, create an **API key**), Google’s API overview, **
YouTube Studio**, and Google’s official Channel ID help. You should not have to 
guess which Google screen to use or whether you need OAuth.

 1. Upload the **`servantly-sermon-importer`** folder (the one that contains `servantly-
    sermon-importer.php` alongside `readme.txt`, `includes/`, `assets/`, etc.) to `/
    wp-content/plugins/`. If a ZIP wraps that folder in an extra parent directory, 
    use the inner folder that contains the main plugin PHP file.
 2. Activate the plugin under **Plugins** (look for **Servantly Sermon Archive** in
    the list).
 3. Open **Sermon Importer  Settings**. Paste your **YouTube Data API v3** key and **
    Channel ID** using the on-screen explanations and links. Under **Comments & discussions**,
    leave the default (**do not change comments**) unless you want sermon-only or sitewide
    closure — then **Save**. Use a plain **API key** — not an OAuth “Web application”
    client. Restrict **APIs** to **YouTube Data API v3** only; leave **Application 
    restrictions** on **None** until imports and live checks work, then optionally 
    use **IP addresses** if your host provides a stable outbound IP. Avoid **HTTP referrers**—
    WordPress calls YouTube from your **server**, not from visitors’ browsers, so referrer
    rules usually break everything.
 4. Open **Service Times** and add the recurring times you stream or meet. Live detection
    only calls YouTube **during windows** around these times (see FAQ), which keeps
    day-to-day quota use low.
 5. Open **Import**. If the key or channel ID is missing, the tab shows a warning with
    a **link back to Settings**. Run **Import latest** for a small first test, or **
    Import full channel** when you are ready to backfill history (see FAQ for quota).
 6. Create or edit pages: assign the **Sermon Archive** template where needed. **`sermons_url`**
    on the hero defaults to `home_url( '/sermons/' )` unless overridden. Put `[servantly_watch]`
    on your Watch page (any slug); the hero finds it automatically, or set **Watch 
    online page URL** in Settings. Add `[servantly_latest_sermon]` on your homepage(
    or any hero page).

#### Getting a YouTube API Key (same links as in Settings)

If you prefer this readme over the admin screen, follow the same path:

 1. [Google Cloud Console](https://console.cloud.google.com/) — pick or create a project.
 2. Enable [YouTube Data API v3](https://console.cloud.google.com/apis/library/youtube.googleapis.com).
 3. [Credentials](https://console.cloud.google.com/apis/credentials)  **Create credentials****
    API key** (not OAuth / not “Web application”).
 4. Optional context: [YouTube Data API overview](https://developers.google.com/youtube/v3/getting-started).
 5. **Edit** the key  **API restrictions**  **Restrict key**  only **YouTube Data API
    v3**. **Application restrictions**  **None** first; then optionally **IP addresses**.
    Avoid **HTTP referrers** for server-side calls.
 6. Paste the key into **Sermon Importer  Settings** and save.

#### Finding Your Channel ID (same steps as in Settings)

Your **channel ID** is almost always **24 characters**: **UC** plus **22** more 
letters and numbers (no spaces). For standard **UC…** IDs, the plugin derives your
hidden **uploads playlist** ID without an extra `channels.list` call.

 1. [YouTube Studio](https://studio.youtube.com/) while signed in as the account that
    owns the church channel.
 2. **Settings** (gear) in the left sidebar  **Channel**  **Advanced settings**.
 3. Copy **Channel ID** (full string starting with **UC**).

Official help: [Find your YouTube user & channel IDs](https://support.google.com/youtube/answer/3250431)(
includes **youtube.com/account_advanced**).

## FAQ

### Can I see a live example?

Yes. The plugin is running at [Calvary Chapel Lake Arrowhead](https://calvarycla.org/).
See the [sermon archive](https://calvarycla.org/sermons/), the [Watch Online page](https://calvarycla.org/watch/),
and the homepage sermon hero shortcode in action.

### What type of Google credential do I need?

A **YouTube Data API v3 API key** created in Google Cloud **Credentials** (**Create
credentials  API key**). You do **not** need OAuth, a “Web application” client ID,
or a Google Sign-In flow — those are for a different kind of integration. Restrict
the key to **YouTube Data API v3** under API restrictions; see Installation for 
application restrictions (avoid HTTP referrers).

### How do I find my Channel ID?

It is almost always **UC** plus **22** more characters (**24** total), no spaces.
In [YouTube Studio](https://studio.youtube.com/): **Settings  Channel  Advanced 
settings  Channel ID**. Google’s help: [Find your YouTube user & channel IDs](https://support.google.com/youtube/answer/3250431).

### What is the difference between Latest import and Full import?

**Import latest** (and **Auto-Import**) only fetch the **newest batch** of videos
from your uploads playlist — the same cap shown on the Import tab — so routine updates
stay fast and light on quota. **Import full channel** walks the **entire** uploads
playlist from newest to oldest until the end, which is ideal for a **first-time 
backfill** but uses more quota because YouTube charges **one quota unit per playlist
page** (up to **50 videos** per page). Standard **UC…** channel IDs also avoid an
extra `channels.list` call when resolving the uploads playlist.

### How much YouTube API quota does this plugin use? Do I need to worry about 10,000?

Google’s default free quota for the YouTube Data API is **10,000 units per day**
per project (Google may change policy; check your Cloud Console **Quotas** page).**
Units are not “sermons”** — each `playlistItems.list` or `videos.list` request typically
costs **1 unit**; `channels.list` is **1 unit** when needed (non-standard channel
IDs).

**Imports:** roughly **1 unit per 50 videos** listed from the uploads playlist (
each API page). A **latest** run only pulls a capped number of recent videos. **
Auto-Import** uses that same recent-only scope on your schedule.

**Live detection:** when the site actually hits YouTube during a **service-time 
window**, one refresh uses **playlistItems** + **videos.list** = **up to 2 units**.
Outside those windows the plugin does **not** poll YouTube for live status; cached
responses may use **0** additional units.

For a typical church schedule, **10,000 units/day is plenty** if you use **latest**
imports day-to-day and only run **full** when you mean to. If something spikes (
quota errors, `quotaExceeded` in JSON), open **Sermon Importer  API log** to see
the exact reason.

### Why does live detection only work sometimes?

**By design.** Live status is only checked **during windows** built from your **
Service Times** (before start, during expected length, and a few minutes after).
Outside those windows the site does not call YouTube for live checks — that saves
quota and avoids pointless API traffic. The Watch UI still works; it simply will
not “discover” live until a window is active (or a cached live state is still valid).

### What does the API log tab show?

Recent **failures** from the YouTube Data API and related import steps: **time**,**
HTTP status**, **context** (e.g. which API method), **error code**, a **human-readable
message**, and an expandable **JSON response body** when available so you can read
Google’s reasons (**quotaExceeded**, **keyInvalid**, etc.). **API keys are redacted**
in stored text (`key=***`), so you can share a screenshot with support without leaking
your secret.

### Does this work with any YouTube channel?

Yes. Any church or ministry with a YouTube channel can use this plugin. It works
with standard **UC…** channel IDs and can resolve uploads playlist identifiers for
the importer when the ID format needs a `channels.list` lookup.

### Will it import all our past sermons?

Yes. Use **Import full channel** on the **Import** tab to scan your channel’s entire
uploads playlist. Depending on how many videos you have, the first run may take 
a while and will use more quota than day-to-day **latest** runs. After the backfill,
use **Auto-Import** or **Import latest** for new uploads.

### What does Auto-Import do, exactly?

WP-Cron runs **once per hour**. If auto-import is enabled and the current **day 
and hour** match your configured slots (up to **two hours per day**), the plugin
runs a **recent-only** import (capped batch size), not a full historical rescan.

### What happens if we upload a non-sermon video?

The title parser expects common sermon title patterns. Videos that do not match 
well still import as posts — you can lock or delete them from the **Manage Sermons**
tab.

### Can we edit imported sermons without losing our changes?

Yes. Lock any sermon post from the **Manage Sermons** tab. Locked posts are not 
overwritten by import. Unlocked posts can be refreshed when you re-import.

### Does it work with our theme?

The plugin targets compatibility with common WordPress themes (including Storefront,
Divi, and many Elementor-built sites). For the archive layout, assign the **Sermon
Archive** page template to your sermons page in the editor. Advanced users can still
override via a child theme if needed.

### What if we have duplicate speaker names?

Use **Sermon Importer  Bulk & titles** to merge duplicate taxonomy terms. On the
same tab you can enable a **custom title split** (delimiter + part-to-field map)
when your channel uses a consistent pattern different from the built-in parser.

### Is there a Pro version?

No paid **Sermon Importer** tier exists. This plugin is completely free for all 
sermon and archive features, with no feature locks. It was built for our church 
and given to the church community at no cost.

### Why are comments turned off everywhere?

By default they are **not** — **Sermon Importer  Settings  WordPress comments** 
is set to **“Do not change comments.”** If you choose **“Disable sitewide,”** then
comments and pings are closed everywhere while that option is saved (and the Comments
screen is hidden). Pick **“Sermon posts only”** if you want blog or page comments
but not on imported sermons.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Servantly Sermon Archive with YouTube Import and Live Detection” is open source
software. The following people have contributed to this plugin.

Contributors

 *   [ WhoKnew.io ](https://profiles.wordpress.org/whoknewio/)

[Translate “Servantly Sermon Archive with YouTube Import and Live Detection” into your language.](https://translate.wordpress.org/projects/wp-plugins/servantly-sermon-importer)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/servantly-sermon-importer/),
check out the [SVN repository](https://plugins.svn.wordpress.org/servantly-sermon-importer/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/servantly-sermon-importer/)
by [RSS](https://plugins.trac.wordpress.org/log/servantly-sermon-importer/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 2.1.12

 * Fix: Scheduled auto-import could race when two overlapping WP-Cron requests ran
   at once, creating duplicate WordPress posts (and duplicate publish push notifications)
   for the newest YouTube video. The hourly lock is now claimed atomically via add_option(),
   and each video is claimed before insert. New sermons are created as draft, tagged
   with sermon_video_id, then published so concurrent imports cannot both publish
   the same YouTube ID. Stuck drafts from an interrupted import are finished on 
   the next run.
 * Fix: Plugin Check compliance — prefixed the reverse-proxy HTTPS bootstrap variable
   and documented third-party cache purge hooks so WordPress.org Plugin Check no
   longer flags them.

#### 2.1.11

 * Fix: Import post dates are now formatted in the site timezone instead of UTC.
   Version 2.1.10 capped future YouTube publish times to “now” but still wrote UTC
   clock values into post_date, which WordPress treats as local time — scheduling
   sermons hours later (e.g. an 11 AM import appearing as 6 PM). Capped dates use
   current_time(); past YouTube dates use wp_date().

#### 2.1.10

 * Fix: YouTube live stream archives with a future publishedAt timestamp no longer
   create scheduled (future) WordPress posts. The post date is now capped to the
   current time at import, so sermons publish immediately instead of being held 
   and published hours later via WP-Cron — which was causing SG Optimizer and other
   caching plugins to rebuild pages in an HTTP context and produce mixed-content
   warnings site-wide.
 * Fix: Added early X-Forwarded-Proto detection in the plugin bootstrap so is_ssl()
   returns correctly on reverse-proxy hosts (SiteGround, WP Engine, Cloudflare) 
   during WP-Cron and other background requests.

#### 2.1.9

 * New: Added screenshots 23–25 showing live stream states for the homepage hero
   and Watch Online page.

#### 2.1.8

 * Fix: Improved copy on the WhoKnew Signal informational tab.

#### 2.1.7

 * New: Added an optional informational tab introducing WhoKnew Signal™, a companion
   plugin for self-hosted web push notifications. The tab is hidden automatically
   when Signal Pro is installed with an active license.

#### 2.1.6

 * Fix: `purge_post_cache()` was calling `sg_cachepress_purge_cache()` with no arguments
   and firing `breeze_clear_all_cache` on every single sermon save, which flushed
   the entire site cache (including the homepage) instead of only the saved sermon’s
   page. Both calls now pass the specific post URL so only that page is invalidated.

#### 2.1.5

 * Fix: Saving a sermon’s speaker/book/series dropdown, meta description, or resource
   buttons (sermon notes, study guide, transcript) now automatically purges the 
   page cache for that post across all major caching plugins (WP Rocket, W3 Total
   Cache, LiteSpeed Cache, WP Super Cache, SG Optimizer, Breeze, Cache Enabler, 
   WP Engine). Changes are visible immediately without a manual admin cache flush.
 * Fix: Saving plugin settings that affect sermon page output (description style,
   layout, button labels, colour palette, scripture links) now triggers a full site
   cache flush automatically.

#### 2.1.4

 * Fix: Restored `background-size: cover` and `background-position: center` to `.
   servantly-card__thumb` so server-rendered cards in the Most Recent Sermons strip
   continue to display thumbnails correctly.

#### 2.1.3

 * Fix: Disabled the Load More button while a fetch is in progress so rapid clicks
   no longer get silently dropped, leaving the pagination stuck.
 * Fix: Switched sermon card thumbnails from CSS `background-image` to `<img loading
   ="lazy">` so images off-screen are deferred by the browser instead of all firing
   simultaneously, which was causing images to fail silently on slower connections
   or after multiple Load More clicks.

#### 2.1.2

 * Compatibility: Tested and confirmed compatible with WordPress 7.0.

#### 2.1.1

 * Fix: Added `Cache-Control: no-store` response headers to the `/sermons` and `/
   filters` REST endpoints to prevent server-side and CDN caches (e.g. SiteGround
   SuperCacher) from storing empty responses and serving “No sermons found” to visitors.
 * Fix: Appended a timestamp parameter to all sermon archive AJAX requests so stale
   cached URLs are never reused by browsers or proxies.
 * Fix: Extended all description style CSS rules to also target `.servantly-res-
   drawer__body` so `ccla-*` and `servantly-desc__*` formatting applies correctly
   inside the resource drawer after it is portaled to `<body>`.
 * Fix: Removed an incorrectly inherited `border-left` green stripe from the resource
   drawer caused by the base description container styles being applied to the drawer
   context.

#### 2.1.0

 * Feature: New Design tab in the plugin admin with selectable layout templates 
   for all three public surfaces — single sermon page (Classic, Hero, Minimal, Sidebar),
   homepage hero shortcode (Classic, Split, Cinematic, Minimal), and sermon archive
   page (Grid, Magazine, List).
 * Feature: Extended CSS variable system — every color used by the plugin’s public
   output (typography, surfaces, badges, overlays, borders) is now driven by a CSS
   custom property. Hardcoded values have been removed throughout.
 * Feature: Per-element color customization. The Design tab exposes individual color
   pickers for all ~23 tokens (accents, backgrounds, surfaces, text, badge, overlay
   colors). The existing preset palette acts as a quick-start baseline; individual
   overrides layer on top without affecting any other tokens.
 * Feature: All layout choices and color overrides are global settings applied consistently
   across every sermon page — clean, predictable, and easy to manage.
 * Feature: Five sermon description display styles (Classic, Article, Summary, Minimal,
   Cards) selectable from the Design tab. The Article style ships a full set of 
   semantic HTML helper classes (`.servantly-desc__section-label`, `.servantly-desc__takeaways`,`.
   servantly-desc__takeaway`, `.servantly-desc__check`, `.servantly-desc__bullets`,`.
   servantly-desc__highlight`) for structured, high-end sermon notes and summaries.

#### 2.0.5

 * Improvement: Imported sermons now receive a clean, structured post excerpt instead
   of the raw YouTube description. The excerpt is assembled from the parsed sermon
   title, scripture reference, and speaker name when available. For non-sermon content(
   e.g. general video channels), the importer falls back to the first clean sentence
   of the description, then to the video title alone — always producing a meaningful
   excerpt for Yoast SEO, Open Graph, and meta descriptions rather than boilerplate
   YouTube text. Re-importing existing unlocked sermons also refreshes their excerpts;
   locked posts are never modified.
 * Feature: The Desc expandable row in Manage Sermons now includes an editable Meta
   Description field (plain text, 160-character max) that maps directly to the WordPress
   post excerpt. Saving the description row saves both fields together, giving administrators
   full control over what appears in Google search results and social sharing previews
   without leaving the plugin.
 * Feature: New Settings option “Meta description source” lets site owners choose
   between the structured sermon fields (default, recommended) or the raw YouTube
   description as the excerpt source on import. Individual sermons can always be
   overridden in the Desc row regardless of this setting.

#### 2.0.4

 * Improvement: The homepage sermon hero (`[servantly_latest_sermon]`) now transitions
   out of “live” state dynamically — no page reload, no manual cache clearing required.
   When the stream ends, the hero smoothly restores the latest sermon title, thumbnail,
   scripture, and speaker using sermon data embedded in the page at render time.
   The live banner and countdown are always present in the HTML and toggled by JavaScript,
   eliminating the previous behavior where a full-page cache could keep the hero
   stuck showing “Streaming Live Now” until the cache was manually cleared.

#### 2.0.3

 * Feature: All public-facing text on the archive page is now configurable via Settings—
   including the “Load More” button, “All Sermons” button, “Sermon Details” button,“
   Most Recent Sermons” heading, “Teaching Library” heading, sort option label, 
   no-results message, and load error message. Enables use of the plugin for any
   content type beyond sermons.

#### 2.0.2

 * Fix: Resources button arrow no longer overflows outside the button boundary on
   the Manage Sermons admin table.
 * Fix: Resources expandable row now opens correctly when the toggle button is clicked.

#### 2.0.1

 * Fix: resolve taxonomy terms by ID before assignment so WordPress never creates
   duplicate speaker/book/series terms when the object cache is cold after an import
   purge.
 * Fix: add auto-merge duplicate terms utility to Bulk & titles admin tab (Tool 
   3) — scans all three sermon taxonomies and one-click merges exact-name duplicates
   into the canonical term.

#### 2.0.0

 * Initial public release.

## Meta

 *  Version **2.1.12**
 *  Last updated **1 month ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.0.3**
 *  PHP version ** 7.4 or higher **
 *  Language
 * [English (US)](https://wordpress.org/plugins/servantly-sermon-importer/)
 * Tags
 * [church](https://vec.wordpress.org/plugins/tags/church/)[sermon](https://vec.wordpress.org/plugins/tags/sermon/)
   [sermon manager](https://vec.wordpress.org/plugins/tags/sermon-manager/)[youtube](https://vec.wordpress.org/plugins/tags/youtube/)
 *  [Advanced View](https://vec.wordpress.org/plugins/servantly-sermon-importer/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/servantly-sermon-importer/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/servantly-sermon-importer/reviews/)

## Contributors

 *   [ WhoKnew.io ](https://profiles.wordpress.org/whoknewio/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/servantly-sermon-importer/)