What are scheduled scans?
Scheduled scans automatically run at a set interval without any manual action. They are useful for:
- Continuous security monitoring of production sites
- Detecting new vulnerabilities introduced by updates or configuration changes
- Generating regular compliance evidence with a reproducible audit trail
- Tracking security posture improvements over time without manual effort
Creating a scheduled scan
Step-by-step from the UI
- Open the Scan History page from the main navigation.
- Click the Scheduled Scans tab at the top of the page.
- Click the + New Schedule button.
- Enter the target hostname or URL (e.g.
https://example.com). - Choose a frequency: Daily, Weekly, or Monthly (see details below).
- Set the run time - the hour of day (0–23) when the scan should start.
- Select your time zone from the dropdown so the run time reflects your local clock, not UTC.
- Optionally attach a scan profile (see Combining with scan profiles below).
- Click Save Schedule.
The new schedule appears in the Scheduled Scans list with its next run time shown. The first run triggers at the next scheduled slot - it does not run immediately on creation.
Supported frequencies
| Frequency | Additional options | Typical use case |
|---|---|---|
| Daily | Choose the hour of day (0–23) | Most production sites - recommended default for active applications |
| Weekly | Choose the day of the week (Mon–Sun) and the hour | Lower-traffic sites; supplement to CI/CD scans; staging environments |
| Monthly | Choose the day of the month (1–28) and the hour | Compliance evidence; infrequently updated sites; cost-sensitive accounts |
Email notifications - delta alerts
Shieldome does not send an email after every scheduled scan. Instead it sends a delta alert - an email only when the results differ from the previous scan of the same target. This keeps your inbox quiet unless something actually changed.
A delta alert is sent when:
- One or more new findings appeared that were not present in the last scan
- One or more previously open findings are now resolved (optional, off by default)
The delta email contains:
- The target URL and scan timestamp
- A count of new findings, grouped by severity
- A short summary of each new finding (name, severity, OWASP category)
- A direct link to the full scan diff view in the app
You can configure notification preferences per schedule in the schedule settings: choose whether to also be notified on resolved findings, and whether to CC additional addresses.
Combining with scan profiles
A scan profile is a saved set of scan configuration options - for example, a profile named "Authenticated + Stealth" might have Playwright enabled for cookie injection, a custom User-Agent header, and a slower request rate to avoid triggering WAF rate limits.
You can attach any saved scan profile to a scheduled scan. The scheduled run then uses all settings from the profile on every execution, without you having to re-enter them. To attach a profile:
- In the + New Schedule dialog (or when editing an existing schedule), expand the Advanced options section.
- Select a profile from the Scan Profile dropdown. Only profiles you have saved appear in the list.
- Save the schedule.
If you later edit the profile (for example, to update credentials), the next scheduled run automatically picks up the updated profile - you do not need to edit the schedule itself.
Managing schedules
Enable and disable
Each schedule has an on/off toggle in the Scheduled Scans list. Disabling a schedule pauses future runs without deleting the schedule or its history. Re-enabling it resumes runs at the next scheduled interval.
Editing a schedule
Click the pencil icon next to a schedule to edit any field: target URL, frequency, run time, time zone, profile, or notification settings. Changes take effect immediately - the next run will use the updated configuration.
Deleting a schedule
Click the trash icon and confirm. Deleting a schedule does not delete past scan results - they remain in your Scan History. Only the recurrence rule is removed.
API reference
Create a schedule
id and next_run_at.{
"target_url": "https://example.com",
"frequency": "weekly", // "daily" | "weekly" | "monthly"
"hour": 3, // 0–23, in the time zone below
"day_of_week": 1, // 0=Mon … 6=Sun; only used when frequency="weekly"
"day_of_month": 15, // 1–28; only used when frequency="monthly"
"timezone": "Europe/Belgrade", // IANA time zone string
"use_playwright": false, // enable JS-rendered scanning
"profile_id": "a1b2c3d4-...", // optional: attach a saved scan profile
"notify_email": "[email protected]" // optional override; defaults to account email
}
List schedules
enabled status, next_run_at, and the last scan result summary.curl -H "X-Shieldome-Key: YOUR_API_KEY" \
https://yourdomain.com/api/scheduled-scans
Enable / disable a schedule
"enabled": false to pause without deleting.curl -X PATCH \ -H "X-Shieldome-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"enabled": false}' \ https://yourdomain.com/api/scheduled-scans/{schedule_id}
Delete a schedule
curl -X DELETE \
-H "X-Shieldome-Key: YOUR_API_KEY" \
https://yourdomain.com/api/scheduled-scans/{schedule_id}
Scan history from scheduled runs
Every scheduled run creates a regular scan entry in Scan History, labelled with a calendar icon to distinguish it from manually triggered scans. You can compare runs over time using the Trends chart or the Scan Comparison feature.
Trends chart
The Trends chart plots the risk score and finding counts across your most recent scans for a given target. To view it: open Scan History, filter by a specific target URL, then click Show Trends. The chart shows:
- Risk score over time - rises when new vulnerabilities appear, drops when they are resolved
- Finding counts by severity - separate lines for critical, high, medium, and low
- Time range - the last 30 scans for the selected target
Webhook notifications
Attach a webhook URL to any scheduled scan to receive a POST request the moment each run completes. Add "webhook_url" to the schedule creation payload or update it with PATCH. The webhook fires on every run, regardless of whether findings changed. The payload includes a new_findings array listing only findings not present in the previous scan:
{
"scan_id": "a1b2c3d4-...",
"target_url": "https://example.com",
"status": "completed",
"schedule_id": "s9f8e7d6-...",
"summary": {
"risk_score": 35,
"critical": 0, "high": 1, "medium": 3, "low": 5
},
"new_findings": [/* findings not present in the previous scan */],
"fixed_findings": [/* findings present in previous scan, now gone */]
}