Overview
The database module provides functions for:- Storing crawl metadata and results
- Tracking content changes and recrawl intervals
- Finding sites due for recrawling
- Adaptive scheduling based on content change frequency
- Sitemap lastmod tracking
Data Models
CrawlSite
Data class representing a tracked site in the database.str
required
Unique site identifier (UUID)
str
required
Base URL of the tracked site
int
required
Configured recrawl interval in minutes
int
required
Maximum pages to crawl per run
int
required
Maximum description/snippet length
datetime | None
Timestamp of last crawl attempt
str | None
MD5 hash of latest llms.txt content
str | None
Public URL of latest llms.txt file
datetime | None
Scheduled time for next crawl
datetime | None
Timestamp when content last changed
str | None
URL to check for quick change detection
datetime | None
Most recent lastmod from sitemap entries
float | None
Calculated average time between content changes
str | None
Secret for webhook-triggered crawls
Functions
get_supabase_client()
Creates and returns a Supabase client instance.Client | None
Supabase client instance, or None if credentials not configured
settings.supabase_url and settings.supabase_key to be set.
save_site_metadata()
Saves or updates site metadata after a crawl with content changes.str
required
Site base URL (used as unique key)
int
required
Recrawl interval in minutes
int
required
Maximum pages to crawl
int
required
Description length setting
str
required
MD5 hash of the llms.txt content
str
required
Public URL of uploaded llms.txt
str | None
default:"None"
Optional sentinel URL (defaults to base_url)
bool
True if save succeeded, False otherwise
- Uses upsert with
base_urlas conflict key - Sets
last_crawled_atandlast_changed_atto current time - Calculates
next_crawl_atby adding recrawl interval - Initializes
avg_change_interval_minutesto recrawl interval - Sets
sentinel_urlto base_url if not provided
get_due_sites()
Retrieves all sites that are due for recrawling.list[CrawlSite]
List of sites where
next_crawl_at is in the pastupdate_scheduling_only()
Updates scheduling metadata without changing content fields (used when content hasn’t changed).str
required
Site ID to update
datetime
required
Scheduled time for next crawl
datetime | None
required
Latest lastmod from sitemap (if available)
bool
True if update succeeded, False otherwise
last_crawled_at→ current timenext_crawl_at→ provided valuesitemap_newest_lastmod→ provided value (if not None)updated_at→ current time
latest_llms_hashlatest_llms_urllast_changed_atavg_change_interval_minutes
update_crawl_result()
Updates site metadata after a crawl with content changes.str
required
Site ID to update
str
required
New llms.txt content hash
str
required
Public URL of new llms.txt file
datetime
required
Scheduled time for next crawl
datetime | None
required
When content changed (usually current time)
datetime | None
required
Latest lastmod from sitemap
float | None
required
Calculated average change interval
bool
True if update succeeded, False otherwise
last_crawled_at→ current timenext_crawl_at→ provided valuelast_changed_at→ provided valueavg_change_interval_minutes→ provided valuelatest_llms_hash→ new hashlatest_llms_url→ new URLsitemap_newest_lastmod→ provided value (if not None)updated_at→ current time
Usage Examples
Initial Site Crawl
Scheduled Recrawl
Adaptive Scheduling
Sitemap-Based Scheduling
Database Schema
Thecrawl_sites table structure:
Related Modules
- storage - Provides public URLs stored in
latest_llms_url - crawler - Uses settings from
CrawlSitefor recrawls - config - Provides Supabase credentials
Notes
- All datetime values use UTC timezone
- Upsert uses
base_urlas unique constraint - Returns False on error instead of raising exceptions
- Client creation is lazy (only when needed)
- All database operations are gracefully skipped if Supabase not configured