What is metadata?

I prefer something very simple when it comes to Salesforce and similar tools:

metadata = configuration data

If it isn't your data (accounts, contacts, etc.) or system data (chatter, sharing, field history, etc.) and it configures something about how your salesforce org behaves, then it is metadata in this system.

I have never felt the classic RDBMS "data about your data" definition told the whole story. It is partly correct where it comes to objects, fields, relationships, etc. But some SFDC metadata also defines how UI, business process, validation, programmatic features and other things behave, and fundamentally, that isn't "data about your data". That is data about how the system needs to behave.


Metadata is basically "data that describes other data".

For example, in Salesforce you can query data like this:

SELECT FirstName FROM Contact WHERE FirstName='Mike'

Salesforce also provides metadata tables that describe code and configuration:

SELECT Id FROM ApexClass WHERE ApiVersion < 25

The Metadata API provides even more detail about code, objects, profiles, reports, and many more items http://www.salesforce.com/us/developer/docs/api_meta/index.htm

The Force.com IDE for Eclipse plug-in uses the Metadata API to keep local files in sync with Salesforce.


Salesforce describes the Metadata API as follows:

Use Metadata API to retrieve, deploy, create, update or delete customization information, such as custom object definitions and page layouts, for your organization. This API is intended for managing customizations and for building tools that can manage the metadata model, not the data itself.

I think of Salesforce Metadata like DDL for databases; it is used to describe your objects, their fields and other properties. It also can be used to describe page layouts, profiles, reports and other aspects of your org. As Jordan has pointed out, you can download this description as XML files.

You are limited in what can be set by Metadata; you can't use it to populate Public Groups or change how sharing settings on objects, for instance. It is useful for documenting your org and tracking changes since the XML can be stored in any change control system.