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

  1. 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.).
  2. Update Actual to the latest version — new YNAB frequencies are often added to mapYnabFrequency over time.
  3. As a workaround, edit the schedule in YNAB to use a supported frequency, re-export, and re-import.
  4. 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

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


AI-assisted analysis of actualbudget/actual@d4334cb6e6 (2026-08-29). Data as JSON: /api/errors/64b834a00515d770. Report an issue: GitHub.