1. A method comprising: obtaining a first data object as a result of executing a first search query against a first data source of a plurality of heterogeneous data sources; obtaining a second data object as a result of executing a second search query against a second data source, that is not the first data source, of the plurality of heterogeneous data sources; determining, based on one or more resolution rules, whether the first data object and the second data object represent similar objects or identical objects; in response to determining that the first data object and the second data object represent similar objects or identical objects: generating an intermediate data object based on grouping the first data object with the second data object; generating a unique identifier for the intermediate data object based on hashing one or more data object properties that uniquely identify the intermediate data object; determining whether a repository data object that shares the unique identifier is stored in a repository that has a particular data model; in response to determining that the repository data object is not stored in the repository, generating a stub data object that is referenced by the unique identifier and that is stored in the repository; resolving the intermediate data object with the stub data object; deduplicating data associated with the intermediate data object and the stub data object; storing the deduplicated data in the repository that has the particular data model; wherein the method is performed by one or more computing devices.