actualbudget/actual · error · Error
Unsupported scheduled frequency: ${frequency}
Error message
Unsupported scheduled frequency: ${frequency} What it means
When importing YNAB5 schedules, mapYnabFrequency converts YNAB frequency strings (e.g. 'Never', 'Daily', 'Weekly', 'Every 2 Weeks', 'Monthly', 'Every 2 Months', 'Every 3 Months', 'Yearly') into RecurConfig. Any frequency value outside the switch cases hits the default branch and throws this error.
Source
Thrown at packages/loot-core/src/server/importers/ynab5.ts:166
patterns: getYnabMonthlyPatterns(dateFirst),
};
case 'everyOtherYear':
return { frequency: 'yearly', interval: 2 };
case 'twiceAMonth': {
return {
frequency: 'monthly',
patterns: getYnabTwiceMonthlyPatterns(dateFirst),
};
}
case 'twiceAYear': {
return {
frequency: 'monthly',
interval: 6,
patterns: getYnabMonthlyPatterns(dateFirst),
};
}
default:
throw new Error(`Unsupported scheduled frequency: ${frequency}`);
}
}
function getScheduleDateValue(
scheduled: ScheduledTransaction,
): RecurConfig | string {
const dateFirst = scheduled.date_first;
const frequency = scheduled.frequency;
if (frequency === 'never') {
return scheduled.date_next;
}
const mapped = mapYnabFrequency(frequency, dateFirst);
return {
frequency: mapped.frequency,
interval: mapped.interval,
patterns: mapped.patterns,View on GitHub (pinned to d4334cb6e6)
Solutions
- Inspect the YNAB5 JSON for scheduledTransactions with an unrecognized frequency and re-create those schedules with a supported value (Never, Daily, Weekly, Every 2 Weeks, Monthly, Every 2/3 Months, Yearly, etc.).
- Update Actual to the latest version — new YNAB frequencies are often added to mapYnabFrequency over time.
- As a workaround, edit the schedule in YNAB to use a supported frequency, re-export, and re-import.
- Patch mapYnabFrequency locally to map the new frequency to the closest supported RecurConfig and file an upstream issue.
Example fix
// before (unsupported value in JSON) "frequency": "Twice a Month" // after (supported value) "frequency": "Every 2 Weeks"
Defensive patterns
Strategy: try-catch
Validate before calling
const SUPPORTED = ['Never','Daily','Weekly','Every 2 Weeks','Monthly','Every 2 Months','Every 3 Months','Every 4 Months','Twice a Month','Every 4 Weeks','Yearly'];
function validateFrequencies(ynabJson) {
return (ynabJson.scheduledTransactions || [])
.filter(s => !SUPPORTED.includes(s.frequency));
} Type guard
function hasSupportedFrequency(s) {
return typeof s.frequency === 'string' &&
['Never','Daily','Weekly','Every 2 Weeks','Monthly','Yearly'].includes(s.frequency);
} Try / catch
try {
await importBudget(ynab5Json);
} catch (e) {
if (e.message.startsWith('Unsupported scheduled frequency')) {
const freq = e.message.split(': ')[1];
// re-create those schedules in YNAB with a supported frequency or upgrade Actual
} else throw e;
} Prevention
- Before importing, scan scheduledTransactions for frequency values not in mapYnabFrequency's cases.
- Keep Actual up to date so newly introduced YNAB frequencies are mapped.
- Avoid hand-editing the frequency field in YNAB5 exports.
- Import schedules one at a time when testing third-party-generated exports.
When it happens
Trigger: Importing a YNAB5 JSON export whose scheduled transaction has a frequency string the importer does not recognize — typically a newly added YNAB frequency value (like 'Twice a Month' or a localized/unexpected value) that predates or postdates the importer's mapping.
Common situations: Importing exports from newer YNAB versions that introduced new schedule frequencies; hand-edited YNAB5 JSON with a typo in the frequency field; third-party tools generating YNAB5 exports with nonstandard frequency values.
Related errors
- throw Error(errorMsg)
- Error importing budget: ${result.error}
- Error importing budget: no budget was loaded
- zipMeta ? getUnsafeZipError(zipMeta) : error
- Unsupported schedule status for tooltip: ${scheduleStatus}
AI-assisted analysis of actualbudget/actual@d4334cb6e6 (2026-08-29).
Data as JSON: /api/errors/64b834a00515d770.
Report an issue: GitHub.