PrototypeOpen Learning Feed is a concept in development. The sample API and validator work, but no school publishes a feed yet, and examples use a fictional school.
Open Learning Feed
Specification · olf 1.0-draft

Open Learning Feed vocabulary

An extension to schema.org for university program and tuition data. It adds 7 types, 36 properties and 9 enumerations, and reuses schema.org everywhere a term already exists.

Search the vocabulary

Builds on schema.org 30.1 (released Sep 16, 2026). Last checked against schema.org on Oct 13, 2026: no open issues. How we stay current

Draft dated 2026-10-10. OLF stands for Open Learning Feed. Its terms use the olf: prefix and the namespace https://olfeed.org/ns#. Generated from tools/build_spec.py.

Conformance

A conforming feed is a JSON-LD document whose top-level node is a olf:InstitutionProgramFeed, served at /olf.json on the root of the domain named in its olf:ownerDomain. The file is JSON that follows schema.org (JSON-LD), served as application/json; it must include "@context". Consumers also accept the earlier name /olf.jsonld and the application/ld+json media type. That one file is all a school publishes.

Every new type subclasses a schema.org type, so a consumer that knows only schema.org still reads names, credits, modes and prices. Required and recommended fields are listed in the school guide, and the JSON Schema encodes the structural rules.

A conforming feed does not include salary, career, job or occupation data. The schema.org properties salaryUponCompletion, trainingSalary and occupationalCategory are excluded from program feeds.

A published term is never repurposed. Changes that would alter a term's meaning get a new term and a new version.

Two sources of terms

A feed is ordinary schema.org JSON-LD with a small set of additions. Anything schema.org already defines is used exactly as schema.org defines it. The olf terms fill only the gaps schema.org leaves for comparing programs.

SourcePrefix in a feedCountWhere to read the definitions
schema.orgnone (it is the default vocabulary)61 types and propertiesTerms we reuse, which links to schema.org's own pages
OLF extensionolf:7 types, 36 properties, 9 enumerationsThis page, from New types down

If a school already marks up its program pages with schema.org, that markup is the starting point. Adding the olf properties to the same objects produces the feed. See Already using schema.org? in the school guide.

New types

TypeSubtype ofGap it closes
olf:InstitutionProgramFeedDataFeedFeed authority and change notices
olf:TuitionPriceSpecificationUnitPriceSpecificationPrice by audience; credit-hour unit
olf:TuitionDiscountPriceSpecificationInstitutional grants and discounts
olf:EligibilityAudiencePeopleAudiencePrice by audience
olf:TransferCreditPolicyIntangibleTransfer credit
olf:CompletionTimeEstimateStructuredValueTime to completion by enrollment pattern
olf:ValueProvenanceStructuredValueValue provenance

olf:InstitutionProgramFeed

Thing › DataFeed › olf:InstitutionProgramFeed

The root of a school's feed. Published by the school at /olf.json on the root of its own domain.

PropertyExpectsDescription
olf:ownerDomainURLThe https origin of the school that publishes the feed, with no path or trailing slash. Every price the school publishes must have its sourceUrl on this domain or one of its subdomains.
olf:feedVersionDateVersion of the feed, as a date. Changes on every publish; Open Learning Feed compares versions to find changes.
olf:includesFeedURLAnother feed from the same institution, such as a separate college or campus, listed from the main feed at /olf.json.
olf:changeNotificationEndpointURLOptional address where the school accepts subscription requests directly.

Also accepts every property of DataFeed.

olf:TuitionPriceSpecification

Thing › UnitPriceSpecification › olf:TuitionPriceSpecification

A tuition price with its unit basis and, when it does not apply to everyone, the audience it applies to. Fees use the same type, told apart by priceComponentType.

PropertyExpectsDescription
olf:tuitionBasisolf:TuitionBasisEnumerationWhat one unit of the price buys: a credit hour, a course, a term, a year, the whole program or a subscription term.
olf:eligibleAudienceolf:EligibilityAudienceWho the price or discount applies to. Omit it only on the one current tuition rate that applies to everyone; whenever more than one current rate applies, every other rate needs an audience. The proposed schema.org audience widening is accepted in its place.
olf:appliesToLevelDefinedTerm, TextCredential level the price applies to when one price list covers several levels.

Also accepts every property of UnitPriceSpecification.

olf:TuitionDiscount

Thing › PriceSpecification › olf:TuitionDiscount

An institutional grant or discount that reduces tuition for an eligible group, such as a 10% veteran grant.

PropertyExpectsDescription
olf:eligibleAudienceolf:EligibilityAudienceWho the price or discount applies to. Omit it only on the one current tuition rate that applies to everyone; whenever more than one current rate applies, every other rate needs an audience. The proposed schema.org audience widening is accepted in its place.
olf:discountPercentNumberPercentage taken off the price it applies to. Greater than 0, at most 100.
olf:discountAmountMonetaryAmountFixed amount taken off, for discounts not expressed as a percentage. A discount gives at least one of discountPercent and discountAmount.
olf:appliesToolf:TuitionPriceSpecificationThe price the discount reduces. Defaults to the program's general price.
olf:combinableWithOthersBooleanWhether the discount can be stacked with other discounts or audience prices.

Also accepts every property of PriceSpecification.

olf:EligibilityAudience

Thing › PeopleAudience › olf:EligibilityAudience

The group of people a price or discount applies to, named with EligibilityCategoryEnumeration members.

PropertyExpectsDescription
olf:eligibilityCategoryolf:EligibilityCategoryEnumerationOne or more groups that qualify.
olf:verificationRequiredText, URLWhat proof of eligibility the school requires, or a page describing it.

Also accepts every property of PeopleAudience.

olf:TransferCreditPolicy

Thing › Intangible › olf:TransferCreditPolicy

How many credits a student can transfer in and from which kinds of prior learning.

PropertyExpectsDescription
olf:maxTransferCreditsIntegerMost credits a student can transfer in.
olf:acceptedCreditSourceolf:CreditSourceEnumerationKinds of prior learning the school accepts for credit.
olf:policyUrlURLPage with the full transfer policy.

Also accepts every property of Intangible.

olf:CompletionTimeEstimate

Thing › StructuredValue › olf:CompletionTimeEstimate

How long the program takes under one enrollment pattern, such as full time, part time or with transfer credits. A program lists one per pattern.

PropertyExpectsDescription
olf:enrollmentIntensityolf:EnrollmentIntensityEnumerationThe enrollment pattern the estimate assumes.
olf:typicalDurationDurationHow long most students take under this pattern, as an ISO 8601 duration such as P18M.
olf:minimumDurationDurationThe fastest possible completion under this pattern.
olf:creditsPerTermNumberCredits per term the estimate assumes.
olf:assumedTransferCreditsIntegerTransfer credits the estimate assumes. Omit for students starting with none.

Also accepts every property of StructuredValue.

olf:ValueProvenance

Thing › StructuredValue › olf:ValueProvenance

Where one value came from and when the school last confirmed it. Attached to individual values, not whole pages.

PropertyExpectsDescription
olf:sourceTypeolf:SourceTypeEnumerationKind of source: federal reporting, the Common Data Set, the school's own pages, a statement the school attests to, or an independent audit.
olf:reportedByOrganizationOrganization that produced the value when it is not the school, such as NCES for IPEDS figures.
olf:sourceUrlURLPage where the value appears, as an https address. For values the school publishes it must be on the feed's ownerDomain or one of its subdomains; a value with sourceType FederalReported or ThirdPartyAudited may point to that source's page.
olf:verifiedDateDateDate the school last confirmed the value. Values unconfirmed for over a year are flagged.
olf:contextNoteTextThe school's explanation of how a value, often a federal figure, applies to its students.

Also accepts every property of StructuredValue.

New properties on schema.org types

PropertyUsed onExpectsDescription
olf:programStatusEducationalOccupationalProgramolf:ProgramStatusEnumerationWhether the program is taking students. Lets subscribers remove closed programs automatically.
olf:transferCreditPolicyEducationalOccupationalProgram, CollegeOrUniversityolf:TransferCreditPolicyTransfer rules. A program-level policy overrides the institution's.
olf:provenancePriceSpecification, PropertyValueolf:ValueProvenanceSource and verified date for this one value.
olf:admissionTestPolicyEducationalOccupationalProgramolf:AdmissionTestPolicyEnumerationWhether applicants must submit a standardized test score such as the GMAT, GRE, SAT or ACT.
olf:focusAreaEducationalOccupationalProgramEducationalOccupationalProgram, DefinedTermA concentration, specialization, track, emphasis or option within the program, with its own name and credits. One neutral term, so schools that say concentration and schools that say specialization publish the same way.
olf:focusAreaTypeEducationalOccupationalProgram, DefinedTermolf:FocusAreaTypeEnumerationWhat the school calls the focus area, so subscribers display it in the school's own words.
olf:completionTimeEducationalOccupationalProgramolf:CompletionTimeEstimateTime to complete under each enrollment pattern the program supports. Put the headline full-time figure in schema.org timeToComplete as well.
olf:classScheduleEducationalOccupationalProgramScheduleWhen classes meet, or that coursework has no set meeting times. One Schedule per option the program offers, such as evenings and weekends.
olf:scheduleTypeScheduleolf:ScheduleTypeEnumerationThe kind of schedule a Schedule describes: daytime, evening, weekend, live online or self-paced online.
olf:programFeedCollegeOrUniversityolf:InstitutionProgramFeed, URLPoints from the school's homepage markup to its feed.

Proposed widenings of schema.org properties

These change existing schema.org terms, so they belong upstream. Until schema.org adopts them, feeds may use them as shown and consumers should accept them.

PropertyAdd toWhy
audienceOffer, PriceSpecificationCore fix for audience-specific prices. Proposed upstream to schema.org.
hasCertificationEducationalOccupationalProgramProgrammatic accreditation, separate from the institution's. Proposed upstream to schema.org.

olf:TuitionBasisEnumeration

Units a tuition price can be quoted in.

olf:EligibilityCategoryEnumeration

Groups a price or discount can be limited to.

olf:ProgramStatusEnumeration

Whether a program is taking students.

olf:CreditSourceEnumeration

Kinds of prior learning that can earn transfer credit.

olf:FocusAreaTypeEnumeration

What a school calls a focus area within a program.

olf:EnrollmentIntensityEnumeration

Enrollment patterns a completion estimate can assume.

olf:ScheduleTypeEnumeration

Kinds of class schedule.

olf:AdmissionTestPolicyEnumeration

Whether a standardized test score is part of admission.

olf:SourceTypeEnumeration

Kinds of source a value can come from.

Price components

Proposed new members of schema.org's PriceComponentTypeEnumeration, used in priceComponentType to separate tuition from fees.

Terms we reuse from schema.org

These are defined by schema.org, not by this extension. A feed uses them exactly as schema.org defines them, so the definitions live on schema.org's pages. Status is as of schema.org 30.1: core terms are stable; pending terms are still under review at schema.org.

Types

schema.org typeStatusHow a feed uses it
DataFeedcoreParent of olf:InstitutionProgramFeed, the feed itself
DataFeedItemcoreOne entry per program, with its dateModified
EducationalOccupationalProgramcoreA degree or certificate program
CollegeOrUniversitycoreThe school, as the program's provider
EducationalOccupationalCredentialpendingThe degree awarded
OffercoreHolds the program's prices
PriceSpecificationcoreParent of olf:TuitionDiscount
UnitPriceSpecificationcoreParent of olf:TuitionPriceSpecification
CertificationcoreInstitutional and program accreditation
OrganizationcoreThe accreditor
DefinedTermcoreThe CIP code in programType
SchedulecoreWhen classes meet, in olf:classSchedule
PeopleAudiencecoreParent of olf:EligibilityAudience
StructuredValuecoreParent of olf:ValueProvenance and olf:CompletionTimeEstimate
MonetaryAmountcoreA fixed discount, in olf:discountAmount
ContactPointcoreWho to contact about the feed

Properties

schema.org propertyUsed onStatusHow a feed uses it
nameThingcoreNames of programs, schools, prices and focus areas
urlThingcoreThe program's page and the school's site
descriptionThingcoreShort program description
identifierThingcoreIPEDS UnitID and OPEID, as PropertyValue
dataFeedElementDataFeedcoreThe list of programs
publisherCreativeWorkcoreThe school publishing the feed
contactPointOrganizationcoreWho to contact about the feed
contactTypeContactPointcoreWhat the contact handles, such as program data
emailContactPointcoreContact email for the feed
itemDataFeedItemcoreThe program in each entry
dateModifiedDataFeedItemcoreWhen each entry last changed
providerEducationalOccupationalProgramcoreThe school offering the program
educationalCredentialAwardedEducationalOccupationalProgramcoreThe degree awarded
educationalLevelEducationalOccupationalCredentialpendingRequired level: certificate to doctoral
credentialCategoryEducationalOccupationalCredentialpendingDegree, certificate and so on
educationalProgramModeEducationalOccupationalProgramcoreRequired: online, onsite or hybrid
numberOfCreditsEducationalOccupationalProgramcoreCredits to complete
timeToCompleteEducationalOccupationalProgramcoreHeadline full-time duration
termDurationEducationalOccupationalProgramcoreLength of one term
termsPerYearEducationalOccupationalProgramcoreTerms per year
typicalCreditsPerTermEducationalOccupationalProgramcoreTypical credits per term
startDateEducationalOccupationalProgramcoreNext start date
applicationDeadlineEducationalOccupationalProgramcoreDeadline for the next start
programPrerequisitesEducationalOccupationalProgramcoreAdmission requirements
programTypeEducationalOccupationalProgramcoreCIP code as a DefinedTerm
termCodeDefinedTermcoreThe CIP code itself
inDefinedTermSetDefinedTermcorePoints to the CIP code list
financialAidEligibleEducationalOccupationalProgramcoreAid programs the program qualifies for
offersEducationalOccupationalProgramcoreThe program's prices
priceSpecificationOffercoreTuition, fees and discounts
pricePriceSpecificationcoreThe amount
priceCurrencyPriceSpecificationcoreThree-letter currency code
priceComponentTypeUnitPriceSpecificationcoreTuition versus each kind of fee
validFromPriceSpecificationcoreWhen a price starts
validThroughPriceSpecificationcoreWhen a price ends; kept as history
hasCertificationOrganizationcoreThe school's accreditation
issuedByCertificationcoreThe accreditor
certificationStatusCertificationcoreWhether accreditation is active
byDaySchedulecoreDays classes meet
startTimeSchedulecoreClass start time
endTimeSchedulecoreClass end time
scheduleTimezoneSchedulecoreTime zone for class times
repeatFrequencySchedulecoreWeekly, every other week and so on
valueMonetaryAmountcoreThe amount of a fixed discount
currencyMonetaryAmountcoreThree-letter currency code of a fixed discount

schema.org terms not used in school feeds

These are valid schema.org, and a school may still use them elsewhere on its site, but they don't belong in a program feed. The validator rejects them.

PropertyWhy
salaryUponCompletionSalary data is out of scope for school feeds
trainingSalarySalary data is out of scope for school feeds
occupationalCategoryCareer and occupation (BLS SOC) data is out of scope for school feeds

Staying current with schema.org

schema.org publishes new releases several times a year. Every week, an automated check downloads the latest schema.org vocabulary and compares it with this extension. A person reviews anything it finds before the spec changes.

  • A term we use is retired or superseded. We switch to schema.org's replacement and give schools a transition period, with a validator warning first.
  • A property stops being allowed on a type we use it on. We follow schema.org's new structure.
  • schema.org adds a term that covers something olf covers. We adopt schema.org's term and retire ours. Overlaps we decided to keep are listed below with the reason.
  • schema.org adopts one of our proposed widenings. We drop the note that it's proposed.

The check is tools/schemaorg_sync.py in the project repository, and its latest result is published at /vocab/schemaorg-check.json.

Open issues from the latest check

  • None. Every schema.org term the feed uses is current, and no olf name overlaps a schema.org term without a recorded decision.

Proposed widenings

PropertyProposed forStatus at schema.org
audienceOfferProposed, not yet adopted
audiencePriceSpecificationProposed, not yet adopted
hasCertificationEducationalOccupationalProgramProposed, not yet adopted

Reviewed name overlaps

olf termDecision
olf:Discontinuedschema.org's Discontinued is an ItemAvailability value for products. Program status also needs Paused and TeachOut, so olf keeps ProgramStatusEnumeration.

Downloads

Machine-readable files, laid out the way schema.org publishes its own. All are regenerated from the same source whenever the vocabulary changes.

FileFormatWhat it is
/vocab/olf.jsonldJSON-LDThe OLF vocabulary as RDFS, in the same shape as schema.org's schemaorg-current-https.jsonld
/vocab/context.jsonldJSON-LD contextMaps schema.org as the default vocabulary and olf: to this extension. Reference it from a feed's @context.
/vocab/olf-terms.csvCSVEvery olf type, property and enumeration member, one per row
/vocab/schemaorg-terms.csvCSVEvery schema.org term a feed uses, with its schema.org status and the release it was checked against
/vocab/schemaorg-check.jsonJSONThe latest compatibility check against schema.org, with any open issues
/schema/olf-1.0.jsonJSON SchemaStructural rules for validating a feed in a build pipeline
/examples/example.jsonJSONA complete, valid feed for Example University, a fictional school
/examples/example-mba.jsonJSONThe same school's MBA on its own