Patent Publication Number: US-11397780-B2

Title: Automated method and system for clustering enriched company seeds into a cluster and selecting best values for each attribute within the cluster to generate a company profile

Description:
CROSS-REFERENCE TO RELATED APPLICATION 
     This application is a continuation of U.S. application Ser. No. 16/261,348 filed Jan. 29, 2019, which is incorporated herein by reference in its entirety. 
    
    
     TECHNICAL FIELD 
     Embodiments of the subject matter described herein relate generally to databases or repositories of company information, and techniques and technologies for automatically creating the same. More particularly, embodiments of the subject matter relate to a method and system for automatically clustering enriched company seeds into a cluster and selecting best values for each attribute within the cluster to generate a company profile. 
     BACKGROUND 
     In general, businesses use a customer relationship management (CRM) system (also referred to as a database system or system) to manage business relationships and information associated with the business relationship. For example, a multi-tenant system may support an on-demand customer relationship management (CRM) application that manages the data for a particular organization&#39;s sales staff that is maintained by the multi-tenant system and facilitates collaboration among members of that organization&#39;s sales staff (e.g., account executives, sales representatives, and the like). This data may include customer and prospect contact information, accounts, leads, and opportunities in one central location. The information may be stored in a database as objects. For example, the CRM system may include “account” object, “contact” object and “opportunities” object. Instances of those objects are called records. 
     Conventional CRM systems can be used to create records for each type of object. Many of these records require that users input a significant amount of information about the company that is associated with the particular record such as the company name, contact information, information about key contacts, leads, opportunities, etc. Finding the required information to complete the record can be time-consuming for each CRM user. For instance, a CRM user can manually search for a company&#39;s home website, and then try to find the information required to complete the record. This information could be spread out across many different webpages that make up the company&#39;s home website. However, in some cases, the company&#39;s home website may be incomplete and not include all of the required information needed to complete the record. In that case, the CRM user needs to search other resources in an attempt to find the required information needed to complete the record. This further complicates the process. In addition, when creating different records, different CRM users may use different versions of the same information to complete a record for the same company. This can lead to inconsistency. 
     To address this challenge, the CRM system may choose to subscribe to one or more database services that provide access to a database that includes company information for each company. These services typically create a database of records for many large companies, and regularly update and maintain those records on a regular basis. These services then charge end users for access privileges to access those records. The end users can then access the database and use information therein for a plethora of uses. 
     Examples of such services include databases offered by Dun &amp; Bradstreet, Mergent Online, Factiva, Business Source Complete, LexisNexis Academic, Uniworld Online, etc. For example, Dun &amp; Bradstreet&#39;s Private Company Database offers a comprehensive commercial database of more than 120 million business records that allows users to uncover targeted leads and new sales opportunities. Sales prospecting tools can be used perform public and private company research, and targeting of companies based on size, location, industry, competitors and more. Million Dollar Directory by Dun &amp; Bradstreet provides information on both private and public companies and their executives. It includes coverage of all businesses in the U.S. and Canada and business profiles on firms in over 200 countries worldwide. This database will also let user&#39;s build company lists with geographic and industry criteria. The Mergent Online database has information on public and private companies. The Mergent Online database provides full company reports, the ability to view competitors of both private and public companies, and up to 15 years of key financial information. Such services/databases can help address the efficiency and consistency issues noted above. 
     One drawback of using these company database services is that they are expensive and cost the end users (e.g., other companies) money to subscribe to for the right to use the database service. Another drawback is that the database associated with the service is not complete in the sense that it only includes certain information for certain companies, but may not include information about other companies (e.g., smaller companies that are not deemed important enough for inclusion in the database). 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       A more complete understanding of the subject matter may be derived by referring to the detailed description and claims when considered in conjunction with the following figures, wherein like reference numbers refer to similar elements throughout the figures. 
         FIG. 1  is a block diagram of a seed collection, enrichment and clustering system in accordance with the disclosed embodiments. 
         FIGS. 2A and 2B  collectively illustrate a method for automatically generating a repository of company profiles in accordance with the disclosed embodiments. 
         FIG. 3  is a flowchart of a method performed by the seed enricher module for automatically determining and selecting a company name in accordance with the disclosed embodiments. 
         FIG. 4  is a flowchart of a method performed by the seed enricher module for automatically enriching a company seed in accordance with the disclosed embodiments. 
         FIG. 5A  is a flowchart of a method performed by the clusterer and company profile generator module for automatically clustering company seed data from the enriched company seeds into a cluster and processing the company seed data of the cluster to generate a company profile in accordance with the disclosed embodiments. 
         FIG. 5B  is a flowchart of a method performed by the clusterer module for automatically clustering company seed data from the enriched company seeds into a cluster in accordance with the disclosed embodiments. 
         FIG. 5C  is a block diagram of a system for generating score/ranks for various attributes that are part of a cluster in accordance with the disclosed embodiments. 
         FIGS. 6A and 6B  are collectively a flowchart of a method performed by the company logo module of the company enricher module for extracting a plurality of images and then selecting one of the images from the plurality of images as a company logo in accordance with the disclosed embodiments. 
         FIG. 7  is a flowchart of a method performed by the company executive determination module for automatically generating executive profile information for a company from multiple sources in accordance with the disclosed embodiments. 
         FIG. 8  is a flowchart of a method performed by the rating module for rating company profiles and then using a highest rated company to create a CRM record in a CRM system in accordance with the disclosed embodiments. 
         FIG. 9  is a block diagram of a company scoring generator that can be executed at the rating module to rate company profiles that are stored in a repository in accordance with the disclosed embodiments. 
         FIG. 10  is a flowchart of a method performed by the quality gate and publisher module for determining quality of a version of a repository and determining whether to publish that version of the repository depending on its quality score in accordance with the disclosed embodiments. 
         FIG. 11  is a block diagram of a quality scoring generator that can be executed at the quality gate module to compute a quality score for a particular version of a repository in accordance with the disclosed embodiments. 
         FIG. 12  is a schematic block diagram of an example of a multi-tenant computing environment in which features of the disclosed embodiments can be implemented in accordance with some of the disclosed embodiments. 
         FIG. 13  is a block diagram that illustrates an example of an environment in which an on-demand database service can be used in accordance with some implementations. 
         FIG. 14  is a block diagram that illustrates example implementations of elements of  FIG. 13  and example interconnections between these elements according to some implementations. 
     
    
    
     DETAILED DESCRIPTION 
     The process of generating and maintaining a company database is time-consuming, tedious and inefficient. Even the process of acquiring data needed to build and regularly update a single company profile that is included in a company database that includes thousands of such company profiles is time-consuming, tedious and inefficient. 
     For example, according to one approach, a person could do a search to try to find various web-based resources and then methodically go through those web-based resources to collect various pieces of information that could be potentially included in the company profile. The person must first know whether they have found a web resource that is “good” or “valid.” There can also be fake websites that use a company name to attract traffic, but have no true affiliation with the company. That process alone can be time-consuming. In some cases, companies may have websites without the company name or with the wrong company name or with multiple inconsistent company names. Even once the company&#39;s website or home webpage is found, it may be company information that would be desirable to include in a company profile, or have invalid information that is outdated or incorrect. The person could then perform additional searches to attempt to find company information (that would be desirable to include in a company profile) from other webpages that mention the company, and even once a source of the additional information is found (e.g., after comparing various sources that might include the missing formation that is sought), the person still needs to validate that the information is in fact the company information the person sought. For instance, if it is desirable to include a certain piece of information (such as a company&#39;s logo or list of executives) that is not provided by the company via one of the webpages from the company&#39;s home website, the person might do a search for that information and come up with hundreds of possible results that they must then sort through and determine which result is the best source. All of this trial and error searching consumes even more time, and even then, this process still prone to error because there is no easy way to validate which information is accurate and which information is inaccurate. The person could attempt to acquire this information from the company itself and/or validate this information with a company representative, but that can also be time-consuming, impractical, or impossible (e.g., if no company representative is willing to provide the information or verification that the information is accurate). These are just a few of the challenges faced when constructing a company profile for a single company that is part of a large database. As such, there are various difficulties involved in the process of creating a single company profile. 
     The person could then repeat this process for each company that is to be included in the database. There may be thousands, or even hundreds of thousands, of companies in some databases, and the problems noted above become even more pronounced as the number of companies to be included in the database increases. 
     Another problem is that once the initial database is created, the company information for each company profile needs to be periodically re-checked to see if it has changed and needs to be updated. In addition, as new companies come into existence this process has to be repeated to add a new company profile to the database for each new company. This process is obviously time-consuming and prone to error. As a result, many databases choose to focus on a limited number of companies that are included in the database to limit the time needed to regularly update records for each company. 
     Moreover, the process for even determining which companies should be included in the database, or added to the database over time, can also be somewhat arbitrary since it is left to a human decision maker to decide which companies warrant having their profile included in the database. 
     It would be desirable to provide tools that can allow for a repository of company profiles to be generated and regularly updated in a way that is automated, efficient, and consistent, while also helping to eliminate the need to subscribe to a database service such as those described above. 
     Once the database has been created, and is available for use by end users, the end users may need a way to decide which companies to target when there are multiple different options to choose from. For example, a salesperson might decide that they want to start a marketing campaign directed to a company that buys widgets. The database could include, for example, 50 different companies that are known to buy widgets. The salesperson would then have to review each of the different company profiles to better determine who the best target companies are, and then select a company profile which they believe is the best target for the marketing campaign. It would be desirable if there is some automated way to rank or rate each of the company profiles according to various criteria or metrics so that the various different companies can be sorted based on their ranking or rating, and then presented to the end user in a ranked order. 
     Prior to describing the disclosed embodiments, some definitions for certain terminology will be provided. 
     As is known, the Internet is a global wide area network that connects computer systems across the world. It includes several high-bandwidth data lines that comprise the Internet “backbone.” These lines are connected to major Internet hubs that distribute data to other locations, such as web servers and ISPs. The World Wide Web is a collection of webpages following the http protocol that can be accessed using a web browser via the Internet. The http protocol is a language that is used on the Internet in order to transfer data and communicate. 
     A search engine is a web service that helps people find webpages from other websites. Examples of search engines include Google, Bing, Yahoo, or DuckDuckGo. Search engines are normally accessed through a web browser or through a webpage. Search engines search websites available within the World Wide Web. The search engine searches the Internet (or select parts of the Internet) based on important words, and keeps an index of the words they find and where they find them to allows users to look for words or combinations of words found in that index. 
     A web server can refer to computer hardware or software, or both of them working together. A web server hosts one or more websites on the Internet. “Hosting” means that all the webpages and their supporting files are available on that computer. A web server stores a website&#39;s files, namely all HTML documents and their related assets, including images, CSS stylesheets, JavaScript files, fonts, videos, etc. A web server provides support for Hypertext Transfer Protocol (HTTP) that specifies how to transfer hypertext (i.e., linked web documents) between two computers. HTTP provides clear rules for how a client and server communicate. 
     On the hardware side, a web server is a computer that stores web server software and a website&#39;s component files (e.g. HTML documents, images, CSS stylesheets, and JavaScript files). It is connected to the Internet and supports physical data interchange with other devices connected to the web. On the software side, a web server includes several parts that control how web users access hosted files, at minimum an HTTP server. An HTTP server is a piece of software that understands URLs (web addresses) and HTTP (the protocol your browser uses to view webpages). It can be accessed through the domain names (like mozilla.org) of websites it stores, and delivers their content to the end-user&#39;s device. The HTTP server is responsible for processing and answering incoming requests. On receiving a request, an HTTP server first checks whether the requested URL matches an existing file. If so, the web server sends the file content back to the browser. If not, an application server builds the necessary file. If neither process is possible, the web server returns an error message to the browser (e.g., 404 Not Found). 
     The web server will send any webpage from the website it is hosting to any user&#39;s web browser, per user request. To fetch a webpage, a browser sends a request to the web server, which proceeds to search for the requested file in its own storage space. On finding the file, the server reads it, processes it as needed, and sends it to the browser. At the most basic level, whenever a browser needs a file which is hosted on a web server, the browser requests the file via HTTP. When the request reaches the correct web server (hardware), the HTTP server (software) accepts request, finds the requested document (if it doesn&#39;t then a 404 response is returned), and sends it back to the browser, also through HTTP. Only clients can make HTTP requests, and then only to servers. Servers can only respond to a client&#39;s HTTP request. When requesting a file via HTTP, clients must provide the file&#39;s URL. The web server must answer every HTTP request, at least with an error message. 
     A static web server, or stack, consists of a computer (hardware) with an HTTP server (software). The server sends its hosted files “as-is” to a browser. A dynamic web server consists of a static web server plus extra software, most commonly an application server and a database. The application server updates the hosted files before sending them to your browser via the HTTP server. For example, to produce the final webpages displayed in the browser, the application server might fill an HTML template with contents from a database. This setup makes it easier and quicker to maintain and deliver the content. 
     A web site is a collection of linked webpages (plus their associated resources) that share a unique domain name. A website&#39;s main webpage can be called a homepage. The webpages of a website are grouped together and usually connected together in various ways. For example, each webpage of a given website can provide explicit links—most of the time in the form of clickable portion of text—that allow the user to move from one page of the website to another. 
     A webpage is a representation of a document that is located at a remote site. A webpage is an individual HTML document for the World Wide Web that is identified and reachable by a unique address called a unique uniform resource locator (URL). Webpages are what make up the World Wide Web. Every Webpage corresponds to various types of information presented to the visitor in a visual and readable manner. The data found in a webpage is usually written in hypertext markup language (HTML) or XHTML format. A webpage can embed a variety of different types of resources such as: style information which controls a webpage&#39;s look-and-feel; scripts which add interactivity to the page; media such as images, sounds, and videos, etc. 
     A web browser is software that retrieves and displays webpages. Examples of web browsers include: Mozilla Firefox, Google Chrome, Opera, Microsoft Internet Explorer or Edge, or Apple&#39;s Safari. A webpage can be accessed and translated by a web browser so that they can be displayed (e.g., on a monitor or mobile device). The web browser is connected to the web server, where the website&#39;s contents are hosted through HTTP. All the information is returned as HTML code, so when the page gets to your browser, all the browser has to do is translate the HTML. The Webpages usually also contain other resources such as style sheets, scripts and images for presentation. Users may be able to navigate to other pages through hypertext links. Webpages can either be static or dynamic. Static pages show the same content each time they are viewed. Dynamic pages have content that can change each time they are accessed. These pages are typically written in scripting languages such as PUP, Perl, ASP, or JSP. The scripts in the pages run functions on the server that return things like the date and time, and database information. 
     In accordance with the disclosed embodiments, to address the problems and challenges mention above, methods, systems and related technologies are provided that automatically build a repository of company profiles by crawling the Internet to find company information from various sources (referred to as company seeds), enrich those company seeds, assemble the enriched company seeds into clusters, pick the best information from each cluster to generate a corresponding company profile for a particular company, and validate the attributes of each company profile. The company profiles can then be stored within a repository, and the repository can eventually be published (if it meets certain quality control measures) for use by users, applications and services. 
     In accordance with one embodiment, a system and method are provided for discovery and identification of a company name from a plurality of different websites. Web pages can be crawled to find many candidate company names from many different web-based sources, and then one of the candidate company names can be selected for each company profile. In one implementation, a method is provided for automatically determining and selecting correct company names from websites based on HTML extracted from home webpages of different companies. An HTML source file is downloaded from a home webpage of a company, and many candidate company names are extracted from the HTML source file along with support indicators that are used as support for determining the company names. For example, the candidate company names can be extracted from HTML source files by inspecting different sections (e.g., a copyright section, a &lt;title&gt; tag, meta tags (html), and other textual parts of the home webpage) that correspond to different sections of the home webpage of each company. Each support indicator is an extracted name that has been determined to have similarities to the company name extracted from the home webpage of each company. For example, the support indicators that are used as support for determining the company name can be extracted from one or more URLs, from one or more social handles, or from different HTML attributes. 
     A clustering algorithm is then applied to cluster similar company names and supporters together into different clusters for further processing that includes computing a score for each cluster using a heuristic formula, and selecting a cluster having a highest score. Each cluster represents a particular company. For example, a score for each cluster can be computed using a heuristic formula based on one or more features derived from that cluster including: cluster size; source location where each of the extracted candidate company names come from within an HTML structure of each HTML web page; and a number of support indicators included in that the cluster. Selection rules are then applied that rank different name options within each selected cluster by order of importance, and, from each of the selected clusters, a top ranked name from is selected as a company name. 
     In accordance with one embodiment, a company seed enrichment method and pipeline system are provided for finding and validating enhancement information to be added to company seed data to enrich company seed data. In one implementation, a seed enricher module automatically enriches collected seeds. Each of the collected seeds comprises: original seed data that includes a plurality of attributes each having a type and an associated value. Each value is a specific piece of structured or unstructured information associated with a particular company. Each website that is associated with each collected seed is processed, via a web crawler of the seed enricher module. The web crawler crawls a home webpage for the company associated with that collected seed to verify, based on similarity between company name and website name, that a website associated with that home page belongs to that company. For example, in one embodiment, the web crawler of the seed enricher module uses a breadth first (BFS) traversal method to fetch information using the different extractor algorithms. 
     When verification is successful, other webpages on the website are processed to fetch information using different extractor algorithms. Each extractor algorithm is designed to fetch a specific attribute for that company that corresponds to either missing seed data for that collected seed or other instances of the original seed data for that collected seed. Each collected seed is then enriched by adding the additional company information to the original seed data for each collected seed to generate an enriched company seed. The additional company information added to each collected seed can include the missing seed data and the other instances of the original seed data that were fetched by the crawler. 
     For example, in one embodiment, some of additional company information for each collected seed can be fetched using one or more search engines. Each collected seed can then be enriched by adding additional company information to the original seed data for each collected seed to generate an enriched company seed. The additional company information added to each collected seed comprises one or more of: the missing seed data and the other instances of the original seed data that were fetched by the crawler, and the additional company information that was fetched by the one or more search engines. In another embodiment, third-party application programming interfaces (APIs) can be used to structure unstructured information to generate structured information. The unstructured information comes from one or more of: the original seed data for each collected seed, the missing seed data to be added to each collected seed, the other instances of original seed data to be added to each collected seed, and the additional company information to be added to each collected seed. Each collected seed can then be enriched by adding this additional company information to the original seed data for each collected seed to generate an enriched company seed. In this case, the additional company information added to each collected seed comprises one or more of: the structured information that was generated by the third-party APIs, the missing seed data and the other instances of the original seed data that were fetched by the crawler, and the additional company information that was fetched by the one or more search engines. The structured information that was generated by the third-party APIs, the missing seed data and the other instances of the original seed data that were fetched by the crawler, and the additional company information that was fetched by the one or more search engines can then be validated by comparing the structured information that was generated by the third-party APIs, the missing seed data and the other instances of the original seed data that were fetched by the crawler, and the additional company information that was fetched by the one or more search engines to the original seed data. Each enriched company seed comprises: values for each attribute from the original seed data prior to enrichment, one or more websites that are associated with that enriched company seed, and additional values for attributes that have been extracted from the one or more websites. The missing seed data and the other instances of the original seed data fetched by the crawler can then be validated by comparing the missing seed data and the other instances of the original seed data fetched by the crawler to the original seed data. 
     In accordance with one embodiment, a system and method are provided for automatically generating company profiles. A plurality of independent seed source services each crawl web pages to collect seeds from different web-based sources. Each collected seed comprises original seed data that includes a plurality of attributes each having a type and an associated value. Each value is a specific piece of structured or unstructured information associated with a particular company. A seed enricher module can then fetch additional information for each of the collected seeds from a plurality of different web-based sources, and add the additional information to each of collected seeds to enrich that collected seed to generate an enriched company seed. Each enriched company seed includes values for each attribute from the original seed data prior to enrichment, one or more websites that are associated with that enriched company seed, and additional values for attributes that have been extracted from the one or more websites. The enriched company seeds can then be automatically clustered into different clusters via a clusterer and company profile generator module by identifying selected ones of the enriched company seeds that each belong to a particular company, and then grouping the selected ones of the enriched company seeds into a cluster that represents that particular company. Each cluster has at least one value for each attribute. A particular value for each attribute of each cluster that has the highest score can then be selected for inclusion in a corresponding company profile for that cluster, and each of the company profiles can be stored in a repository. 
     In one embodiment, the enriched company seeds can be automatically clustered into different clusters into different clusters by: retrieving the enriched company seeds from the repository; determining which ones of the enriched company seeds have similar attributes; and grouping similar enriched company seeds that have similar attributes together into different groups, wherein each group is a cluster of enriched company seeds that corresponds to and represents a particular company. 
     In another embodiment, the enriched company seeds can be automatically clustered into different clusters into different clusters by: indexing, at a search engine of the clusterer and company profile generator module, each of the enriched company seeds by each attribute of that enriched company seed, such that each enriched company seed has an index entry for each attribute to allow each of the enriched company seeds to be searchable by attributes, wherein each index entry represents a particular enriched company seed; and processing each enriched company seed, at a clusterer module of the clusterer and company profile generator module, to: search in the index for other enriched company seeds that have similar attributes to find similar enriched company seeds that are candidates for potential inclusion in a cluster for a particular company. For each seed pair of an enriched company seed for a particular company and a candidate company seed having similar attributes to that enriched company seed, values of attributes of the two company seeds can be compared to calculate and extract features; and a pre-trained random forest machine learning model can then be run on extracted features to determine whether that candidate company seed belongs to the same cluster as the enriched company seed. When the pre-trained random forest machine learning model determines, based on the extracted features, that the candidate company seed belongs to the same cluster as the enriched company seed, that candidate company seed can be added to the same cluster as the enriched company seed. A connective components algorithm can then be executed at the clusterer module to: collect any other candidate company seeds that share a connection to one or more of the other candidate company seeds that were added to the same cluster of the enriched company seed for that particular company; and add the any other candidate company seeds that share a connection to the same cluster. 
     Each cluster can include a number of different attributes, and each attribute within a particular cluster can have multiple values that were obtained from different seeds. Information in each cluster can be processed by: scoring each value of each attribute within that cluster based on how similar each value is to corresponding information extracted from a home webpage for that company; selecting, for each attribute within that cluster, the particular value for each attribute that has the highest score for inclusion in a company profile for that cluster; and grouping all of the selected values from that cluster together to convert that cluster into a company profile for a particular company, wherein the company profile comprises a set of values that had the highest score for each attribute. Each company profile can then be stored in the repository such that users can access the company profiles and use the company profiles in conjunction with applications. 
     For example, each of values for each attribute within that cluster can be scored to generate a score for each attribute by comparing values for each attribute to a value of a corresponding attribute from the original seed data that was extracted from the home webpage for that company. In one embodiment, each of values for each attribute within each cluster can be scored by (a) selecting a particular enriched company seed from the cluster; (b) extracting values for each attribute of that particular enriched company seed; (c) determining a similarity of each extracted value for each attribute of that particular enriched company seed in comparison to an original value of a corresponding attribute from the original company seed to determine a similarity score for that attribute of that particular enriched company seed; (d) scaling each similarity score based on a weight assigned to that attribute to generate a weighted similarity score for each attribute of that particular enriched company seed; (e) summing all of the weighted similarity scores at a website scoring function to generate a website score for that particular enriched company seed; and (f) computing a score, for each value of each attribute of that particular enriched company seed, as a product of the website score for that particular enriched company seed and the similarity score that was computed for that attribute of that particular enriched company seed. Steps (a)-(f) can then be repeated for each of the other enriched company seeds from the cluster to generate scores for all attributes that are part of the cluster. 
     In one embodiment, each company profile comprises the set of values that had the highest score for each attribute, where each attribute is a specific piece of information about a company that describes that company or that can be used to identify that company. In one embodiment, the attributes within a cluster include: a company name attribute, a website address attribute, a ticker attribute, a physical address attribute and a telephone number attribute, and the values within at least one company profile comprise values for a company name, a website address, a ticker symbol, a physical address and a telephone number for a particular company. 
     In accordance with one embodiment, a system and method are provided for automatically enriching a company profile with a company logo by extracting candidate images from various sources and determining which image most closely corresponds the company logo. The company enricher module can perform company-level enrichment processing on the company profile to update the company profile with supplemental information. Specifically, a company logo module can search a plurality of different web-based sources for different images that are candidate logos for the particular company; determine which image most closely corresponds to a company logo for the particular company; select the image that most closely corresponds to the company logo as the company logo to be included in the company profile for the particular company, and add the selected image to the company profile for the particular company to enrich the company profile for the particular company. 
     In one embodiment, a search engine executes a query to search a web-based data source for webpages that reference the particular company, and search results from one or more of the webpages that reference the particular company are then scraped to extract a company name and a company website. The extracted company name extracted from the extracted company website is compared to corresponding fields within the company profile for the particular company, and it can be determined whether the extracted company name and the extracted company website match with the corresponding values for those attributes from the company profile. If there is a match, a logo from the web-based data source (e.g., a Wikipedia webpage) can be extracted (e.g., from an information box within the Wikipedia webpage based on observation of HTML domain information). 
     When the extracted company name and the extracted company website does not match with the corresponding values for those attributes from the company profile, the company logo module can crawl the company website specified in the company profile to extract candidate images for the company logo from the company website; and select either one of the candidate images or the logo that was extracted from the web-based data source as the company logo. For example, in one embodiment, the company logo module can crawl the company website specified in the company profile to extract to extract an HTML file and any imported CSS files from a home webpage of the company website; parse the HTML file and the imported CSS files to extract candidate images for the company logo; filter the candidate images and remove bad image patterns that have been learned to generate a set of remaining candidate images for the company logo from the company website; generate a score for each of the remaining candidate image; and select a sub-set of top remaining candidate images having the highest scores for comparison to the logo that was extracted from the web-based data source to determine which option should be selected as the company logo. 
     In one embodiment, a score for each of the remaining candidate image can be generated by deriving meta-features for each remaining candidate image, and generating a score for each of the remaining candidate images based on the derived meta-features for that remaining candidate image. The meta-features for each remaining candidate image can include, for example, one or more of: image name, image XPATH expression, html tags and attributes, whether the remaining candidate image includes an HREF attribute that directs to the home page, dimensions of the candidate image, and location of the candidate image. 
     In one embodiment, each of the sub-set of top remaining candidate images can be downloaded for further processing, and content features can be extracted from each of the sub-set of top remaining candidate images. The extracted content features for each of the sub-set of top remaining candidate images comprise: actual content dimensions; brightness; and whether that top remaining candidate image is a digital image. In one embodiment, a score for each of the sub-set of top remaining candidate images can be computed, based on the derived meta-features and the extracted content features for each of the sub-set of top remaining candidate images. The logo that was extracted from the web-based data source has a fixed score, and the sub-set of top remaining candidate images each have a score that varies based on their respective derived meta-features and extracted content feature. Either the logo that was extracted from the web-based data source, or one of the sub-sets of top remaining candidate images that has the highest score can be selected as the company logo. 
     In accordance with one embodiment, a system and method are provided for automatically identifying candidates from a plurality of different websites, determining which candidates correspond to company executives for a company profile, and generating an executive profile for the company profile. In accordance with the disclosed embodiments, a company enricher module can then perform company-level enrichment processing on the company profile to update the company profile with supplemental information. Specifically, in this embodiment, a company executive determination module can search, using a search engine API, a plurality of different web-based sources to identify candidate webpages that potentially include information that relates to one or more executives of a particular company having a company profile that is part of a repository; download each of the candidate webpages; extract data from each of the candidate web pages that relates to an executive for the particular company, wherein the extracted data comprises: executive details that correspond to company executives; process the extracted data to generate at least one executive profile for the company profile; and add the at least one executive profile for the particular company to the company profile for that particular company to enrich the company profile for that particular company. 
     In one embodiment, the company executive determination module can also verify whether each of the candidate webpages belongs to the particular company. For example, in one implementation, the company executive determination module can verify whether each of the candidate webpages belongs to the particular company by comparing webpage domain name to the company domain; and then determine whether each of the verified candidate web pages are executive web pages by executing a random forest machine learning model to identify if each verified candidate webpage is an executive page that belongs to the particular company. In one non-limiting implementation, the random forest machine learning model includes words from each of the candidate webpages including: title, body and URL, wherein the words and their n-grams are encoded using Word2Vec neural network to construct vector representations of words and used as the model features. 
     In one embodiment, the company executive determination module can also analyze each of the verified executive webpages to extract executive details from each of the verified executive webpages. For example, in one implementation, in each of the verified candidate webpages, the company executive determination module can mark elements in that verified candidate webpage that are suspected to be names of people and job titles; traverse an HTML tree of that verified candidate webpage to locate one or more subgraph patterns that correspond to names of people and job titles; search the HTML tree of that verified candidate webpage to locate similar patterns that correspond to names of people and job titles; and extract, from the HTML tree of that verified candidate webpage, names of people and job titles. The company executive determination module can then add the extracted names of people and job titles to the company profile for that particular company as executive information. 
     In accordance with one embodiment, a system and method are provided for automatically generating a rating for each company profile of a plurality of company profiles stored in a repository and auto-filling a record with information from one of the highest ranked company profile. In accordance with the disclosed embodiments, a company enricher module can perform company-level enrichment processing on the company profile to update the company profile with supplemental information. Specifically, the company enricher module includes a company rating module that is configured to execute a process for each company to: automatically generate a rating score for each company profile of a plurality of company profiles stored in the repository, where each rating score is generated by processing a plurality of input metrics. In one embodiment, the company rating module can process the plurality of input metrics, at a company scoring function that is executed at the company rating module to rate each of the plurality of company profiles and generate a rating score for each company profile by executing code to: multiply each input metric by a weighting value assigned to that input metric to generate a product, wherein each product scales the relative importance of a particular input metric with respect to each of the other input metrics; sum all of the products for a particular company to generate a rating score for that particular company profile; and rank all of the company profiles based on their respective rating scores. In general terms, each rating score represent popularity, interest, and size of a particular company. 
     In one embodiment, the plurality of input metrics can include any combination of company size in terms of number of employees; a cluster size that indicates a number of company seeds that a particular company profile has in a cluster for that particular company; a reliability score, obtained by crowd source testing, that indicates reliability of each of the seed sources that reflects data correctness of that seed source; a number of company news items that indicates how many news items have been collected on a particular company; and a popularity metric that indicates how many times the particular company profile was selected in the past by other CRM users. 
     In one embodiment, the plurality of input metrics can include any combination of an indication of whether the company profile includes a ticker symbol that indicates that the particular company is publicly traded; an indication of whether the company profile includes a phone number for that particular company; an indication of whether the company profile includes a physical address for that particular company; an indication of whether the company profile includes a first type of social media account for that particular company; an indication of whether the company profile includes a second type of social media account for that particular company; an indication of whether the company profile includes a third type of social media account for that particular company; an indication of whether the company profile includes a page for that particular company in a web-based encyclopedia hosted on the World Wide Web; and an indication of whether the company profile includes a website having a top-level domain name that is one of .edu, .gov and org. 
     A customer-relationship management (CRM) system, that provides a CRM application, can automatically retrieve, in response to a user input, a subset of the company profiles having the highest rating scores from the repository. The company profiles are used to autofill fields of CRM records during a process of creating the CRM records using the CRM application. For example, in response to selection of one of the subset of the company profiles, fields of a new CRM record created by the CRM application can be automatically filled with information from the selected one of the company profiles. To explain further, the CRM application that is used to create the new CRM record in the CRM system can automatically generate a query in response to user input (via a user interface of the CRM application), such as a prefix that represents a company name, and send the query to the repository to search for a number of top candidate company profiles having the highest rating scores. The CRM application can then display the number of top candidate company profiles via the user interface of the CRM application. The number of top candidate company profiles can be sorted based on their respective scores from highest to lowest, so that the user can select one of the top candidate company profiles that will be used to create the new CRM record. When the user selects one of the top candidate company profiles, the CRM application can automatically fill in the company name, website, phone, and address fields of the CRM record with name, website, phone, and address information from the selected one of the company profiles to auto populate the new CRM record with the data for the selected company profile. 
     In accordance with one embodiment, a system and method are provided for automatically verifying quality of company profiles stored in a repository and publishing the repository when the company profiles pass a quality test. In accordance with the disclosed embodiments, a quality gate and publisher module can process information from selected ones of the company profiles that make up the current version of the repository to automatically compute a repository quality score. The repository quality score indicates whether the current version of the repository meets quality standards to publish the current version of the repository to a data store. In one embodiment, the quality gate and publisher module is further configured to: apply a set of statistical methods and crowd sourcing methods, to at least some of the company profiles stored in the current version of the repository, to generate a set of variables; and then process the set of variables, at a repository quality scoring function that is executed at the quality gate and publisher module, to generate the repository quality score for the current version of the repository. The repository quality score indicates quality of the current version of the repository. In one implementation, the repository quality scoring function can execute code to: multiply each variable by a weighting value assigned to that variable to generate a product, and then sum all of the products to generate compute the repository quality score for the current version of the repository. Each product scales the relative importance of a particular variable with respect to each of the other variables. 
     In one embodiment, the quality gate and publisher module can determine whether the repository quality score is greater than or equal to a quality threshold that is used to determine whether the current version of the repository is of sufficiently high quality to allow for publication to the data store, and when the repository quality score is greater than or equal to the quality threshold, publish the current version of the repository to the data store. 
     In one embodiment, the set of variables comprise a name match percentage that is a percentage of company names for the selected ones of the company profiles that match corresponding company names obtained from company websites. A higher name match percentage reflects a higher quality of the current version of the repository, whereas a lower name match percentage reflects a lower quality of the current version of the repository. 
     In one embodiment, the set of variables can include an attribute coverage percentage for the selected ones of the company profiles. The attribute coverage percentage is a percentage of company profiles that have a value for each possible attribute type. A higher attribute coverage percentage reflects a higher quality of the current version of the repository, whereas a lower attribute coverage percentage reflects a lower quality of the current version of the repository. 
     In one embodiment, the set of variables can include an attribute duplication percentage for the selected ones of the company profiles, wherein attribute duplication percentage is a percentage of company profiles that exhibit attribute duplication by having duplicate values for the same attribute type, wherein a lower attribute duplication percentage reflects a higher quality of the current version of the repository, and wherein a higher attribute duplication percentage reflects a lower quality of the current version of the repository. 
     In one embodiment, the set of variables can include an overall display formatting score for a set of attributes selected from the company profiles in the repository. The overall display formatting score is a percentage of the set of attributes that have an average score greater than a threshold. Each one of the set of attributes can be scored by a plurality of users via a crowd sourcing platform. Each user submits a score for formatting of values for each one of the set of attributes, and an average of the submitted scores is computed for each of the attributes. The percentage of the set of attributes having an average score greater than a threshold is computed as the overall display formatting score. A higher overall display formatting score reflects a higher quality of the repository, whereas a lower overall display formatting score reflects a lower quality of the repository. 
     In one embodiment, the set of variables can include a geographical distribution of the company profiles in the current version of the repository. The quality gate and publisher module can perform geo-statistical analysis to determine the geographical distribution of the company profiles in the current version of the repository. The geographical distribution describes percentage of company profiles from different regions of interest. The quality gate and publisher module can also compare the geographical distribution of the company profiles in the current version of the repository to another geographical distribution of the company profiles in a past version of the repository to determine consistency of the current version of the repository with the past version of the repository. 
       FIG. 1  is a block diagram of a seed collection, enrichment and clustering system  100  in accordance with the disclosed embodiments. The seed collection, enrichment and clustering system  100  is a robust highly scalable system for generating a repository of company profiles that can be used other applications (e.g., CRM applications). The seed collection, enrichment and clustering system  100  is designed to collect seeds  108  from any source (e.g. Thomson Reuters, New York company registry, etc.) via dedicated components. In particular, the seed collection, enrichment and clustering system  100  includes a system manager  102  and independent seed source services  106 - 1  . . .  106 - n  that are triggered by the system manager  102  to collect new seeds. 
     The seed collection, enrichment and clustering system  100  includes a system manager  102 , a plurality of independent seed source services  106 - 1  . . .  106 - n , a seed master module  112 , a search engine  120 , a repository  124 , a seed enricher module  130 , a  147  that accesses webpages over a  148 , a clusterer and company profile generator module  160 , and a quality gate and publisher module  170 , and the data store  180 . 
     The system manager  102  controls and manages other components of the seed collection, enrichment and clustering system  100  such as the independent seed source services  106 - 1  . . .  106 - n , the seed master module  112 , and the clusterer and company profile generator module  160 . In particular, the system manager  102  triggers each instance of the independent seed source services  106 - 1  . . .  106 - n  so that the independent seed source services  106 - 1  . . .  106 - n  collects new seeds. Each collected seed comprises original seed data that includes one or more attributes each having a type and an associated value. As used herein, an “attribute” can refer to a specific piece of information about a company that describes or can be used to identify that company. In most cases, an attribute is a tuple of a type and a value &lt;type, value&gt;, where the type can be different properties of some entity (e.g., if the entity is company or an organization some examples of types can include company name, website address, phone, physical address, stock ticker, industry, Facebook® Handle, etc.). Each value is a specific piece of structured or unstructured information associated with a particular company (e.g., information about a company that describes a company, identifies a company, or that can be processed to identify a company) that has been extracted from a webpage or another source. In most cases, the original seed data is raw data or a list of attributes that has been pulled from some source (e.g., Wikipedia®, Thomson-Reuters®, Jigsaw®, account data from a CRM system, etc.). The original seed data can come in different forms (e.g., structured or unstructured data). In some cases, a seed is a vector of information that can contain one or more values for attributes that correspond to some company, organization or entity. While a seed can include any information about a company some common examples of this type of information can include: a company name, a company address, a company telephone number, a URL for a company website, one or more social media handles for the company, etc. A “company seed” is a seed having one or more values for attributes that point to some company, organization or entity. 
     Each of the independent seed source services  106 - 1  . . .  106 - n  can output the collected seeds to the seed master module  112 . The seed master module  112  can store the seeds temporarily and then persist them at the repository  124 . The seed master module  112  can also send the seeds  108  to the seed enricher module  130  for enrichment as will be described in greater detail below. Each collected seed can be enriched to include additional information or seed data that was not present in the original seed data. The “additional seed data” can include new attributes that were not present in the original seed data (where the new attributes also have values), or can include some or all of the same attributes that were present in the original seed data, where the same attributes can have the same or different values that the original seed data. An “enriched company seed” is an extended object—that holds the original collected seed, and adds new values for attributes by different methods (crawling website, invoking third-party APIs, geo-location services, using search engines and more). In other words, each enriched company seed typically includes: values for each attribute from the original seed data prior to enrichment, one or more websites that are associated with that enriched company seed, and additional values for attributes that have been extracted from the one or more websites. In other words, some enriched company seeds may include one website, and other enriched company seed may include multiple websites. An example might be CRM account data that contains company name, company website and phone (e.g., Apple INC, www.apple.com, 1-800-275-2273). Another example of a seed might be Thomson Reuters (TR) data (e.g., in the following line https://permid.org/1-4295907347 different information about VMware can be found). 
     The search engine  120  is used for searching the repository  124  for seeds and/or company profiles. In one implementation, the search engine  120  can be implemented using an open source enterprise search platform such as Solr ( 120 ) from the Apache Lucene project. Its major features include full-text search, hit highlighting, faceted search, real-time indexing, dynamic clustering, database integration, NoSQL features and rich document handling. 
     In one implementation, the repository  124  where seeds and company profiles are stored can be implemented using a data store or distributed database such as the Apache Cassandra™ database management system. Apache Cassandra™ is a free and open-source distributed NoSQL database management system designed to handle large amounts of data across many commodity servers, providing high availability with no single point of failure. Cassandra™ offers robust support for clusters spanning multiple datacenters, with asynchronous masterless replication allowing low latency operations for all clients. 
     Once a seed is collected and persisted at repository  124 , the seed enricher module  130  starts to enrich it. The seed enricher module  130  includes various components that each perform enrichment processing to enrich the seeds  108 . For example, the seed enricher module  130  fetches desired company information using external sources. The enrichment process performed by the seed enricher module  130  can be designed as a pipeline  132 - 136 , where each step in the seed enricher pipeline  132 - 136  performs a different enrichment step. 
     For example, in one implementation, the seed enricher module  130  includes a web crawler  132 , search engines  134 , geo-location services  136 , etc. that collectively form a seed enrichment pipeline. The seed enricher module  130  also includes a verification module  138 . 
     As used herein, a web crawler can refer to a program that visits web sites and reads their pages and other information in order to create entries for a search engine index. The entries can include words found on pages of a web site, and where the words are found on each page. For example, words occurring in the title, subtitles, meta tags and other positions of relative importance were noted for special consideration during a subsequent user search. A web crawler indexes each word on the web site in the search index. The major search engines on the web all have such a program, which can also be referred to as a “spider” or a “bot.” 
     Once a seed has been enriched and reaches the end of the seed enricher pipeline  132 - 136 , the seed enricher module  130  sends the enriched company seeds  139  to the verification module  138 . The verification module  138  validates or verifies seed data for each of the enriched company seeds prior to sending them back to the seed master module  112 . Each enriched company seed that is successfully validated/verified can then be sent to the seed master module  112 , and the seed master module  112  stores or “persists” the enriched company seeds  139  at the repository  124 . 
     After the seed have been enriched, the clusterer and company profile generator module  160  can regularly (e.g., periodically or in response to occurrence of a condition of event) start a process of clustering the enriched company seeds. In the clustering process, the clusterer and company profile generator module  160  can retrieve the enriched company seeds from the repository  124 , and can then group similar enriched company seeds together into clusters. Once the seeds have been grouped into clusters the information in each cluster can then be validated to help create a strong company profile for each company. 
     In one embodiment, the clusterer and company profile generator module  160  includes a clusterer module  162  and a profile generator module  164 . The clusterer module  162  can group or cluster the enriched company seeds into different clusters (also referred to as “cluster data sets” herein) that correspond to a particular company. 
     The profile generator module  164  can perform processing to generate company profiles  126  and provide the company profiles to the repository  124 . For example, the profile generator module  164  can use machine learning methods to convert each of the company seed clusters into a corresponding company profile in a process that selects the best information gathered while eliminating redundant information. As such, by extracting and keeping the best information that was collected while removing other information that was collected, each company profile  126  is processed version of a cluster of enriched company seeds that has been processed to further improve it. 
     Once the clusterer and company profile generator module  160  has grouped the enriched company seeds into the clusters and processed them to generate corresponding company profiles, the company enricher module  140  can perform company-level enrichment processing on each company profile to further enrich it by performing various enrichment steps. For example, in one embodiment, the company enricher module  140  includes a rating module  142  that rates the company according to various metrics, a company logo module  144  that finds the best company logo from a number of different image options, and a company executive determination module  146  that finds company executives. 
     Once the company enrichment processing has been performed by the company enricher module  140 , the “enhanced” company profile that has been generated for each company can be stored at the repository  124 . 
     In certain cases, when publication is warranted, the company profiles stored at the repository  124  can be published (e.g., the current version of the repository is published). Once published the company profiles are provided to and stored at the data store  180 , the repository  124  of enhanced company profiles is then available for use by other consumers/applications. 
     In one embodiment, prior to publishing the company profiles to the data store  180 , the quality gate and publisher module  170  can perform processing to determine whether the company profiles that are part of the repository  124  meet certain quality criteria. As will be explained in greater detail below, when the quality gate module  172  determines that the current version of the repository  124  meets the quality criteria, the publisher module  174  can publish the repository  124  of company profiles to the data store  180 . In one embodiment, that will be described in greater detail below, the quality gate module  172  applies a set of statistical methods and crowd sourcing methods in order to determine the quality of a candidate repository. In some embodiments, a smart comparison between previous versions of the repository can be performed to determine data quality. 
     If the quality gate module  172  determines that the current version of the repository  124  does not meet the quality criteria, further processing can be performed by the seed enricher module  130  and/or the rating module  142  further enrich the company profiles until they meet the quality criteria necessary for publication by the publisher module  174 . Once the quality gate module  172  determines that the current version of the repository  124  does meet the quality criteria (i.e., passes the quality test), the publisher module  174  publishes it to data store (S3)  180 . 
       FIGS. 2A and 2B  collectively illustrate a method  200  for automatically generating a repository  124  of company profiles in accordance with the disclosed embodiments. The method  200  can be used to generate the repository  124  without requiring input from any human actors. The method  200  can be performed continuously to generate different versions of the repository  124  and update them over time. The various company profiles are included as part of the repository  124  can then be utilized within a CRM system, for example, to generate various records such as account records, lead records, opportunity records, etc. For sake of simplicity, the method  200  will be described with respect to a single company, but it should be appreciated that the method  200  can be performed for several different companies. In other words, multiple different instances of the method  200  can be executed simultaneously or in parallel to create company profiles for many different companies that will be included as part of repository  124 . 
     With reference to method  200 , steps can be added, omitted, and/or performed simultaneously without departing from the scope of the appended claims. It should be appreciated that the method  200  may include any number of additional or alternative tasks, that the tasks shown in  FIGS. 2A and 2B  need not be performed in the illustrated order, and that the method  200  may be incorporated into a more comprehensive procedure or process having additional functionality not described in detail herein. Moreover, one or more of the tasks shown in  FIGS. 2A and 2B  could potentially be omitted from an embodiment of the method  200 . It should also be understood that the illustrated method  200  can be stopped at any time. The method  200  is computer-implemented in that various tasks or steps that are performed in connection with the method  200  may be performed by software, hardware, firmware, or any combination thereof. For illustrative purposes, the following description of the method  200  may refer to blocks/elements mentioned above in connection with  FIG. 1 . In certain embodiments, some or all steps of this process, and/or substantially equivalent steps, are performed by execution of processor-readable instructions stored or included on a non-transitory processor-readable medium. For instance, any block/element illustrated in  FIG. 1  will be described in  FIGS. 2A and 2B  as performing various acts, tasks or steps, but it should be appreciated that this refers to processing system(s) and/or storage system(s) of these entities executing instructions to perform those various acts, tasks or steps. Depending on the implementation, some of the processing system(s) can be centrally located, or distributed among a number of server systems that work together. Furthermore, in the description of  FIGS. 2A and 2B , a particular example is described in which various blocks/elements of  FIG. 1  perform certain actions by interacting with other blocks/elements of the system  100 . 
     Method  200  begins at  210 . At  210 , when triggered by the system manager  102 , each of the various instances of independent seed source services  106 - 1  . . .  106 - n  can collect new seeds  108  from any source (e.g., any websites on the Internet, a CRM system, private data companies like Thomson Reuters®, New York Company Registry®, etc.). 
     The method  200  then proceeds to  215 , where the seed enricher module  130  discovers and identifies one or more company names from a plurality of different websites. One implementation of step  215  will be described below with reference to  FIG. 3 . 
     At  220 , the seed enricher module  130  can perform seed enrichment processing for each seed. As will be described in greater detail below, the seed enricher module  130  includes a seed enricher pipeline  132 ,  134   136  that can find enhancement information (or “enriched company seed data”) used to enrich the original company seed data for each company seed. In addition, the seed enricher module  130  includes a verification module  138  that can verify this enhancement information (or “enriched company seed data”) before making it part of the seed data for a seed. 
     At  225 , once each seed reaches the end of the seed enricher pipeline  132 ,  134   136 , and has been verified by the verification module  138 , the seed enricher module  130  can persist each enriched company seed at the repository  124 . One implementation of steps  215 ,  220 ,  225  will be described below with reference to  FIG. 4 . 
     At  230 , for each company, the clusterer and company profile generator module  160  can cluster selected company seed data into a cluster (also referred to as “cluster data set”) for that company. For example, the clusterer and company profile generator module  160  can validate that certain company seed data from various enriched company seeds belongs to same company, and then group it into a cluster for that company. In other words, for each company, some of the company seed data from the various enriched company seeds can be grouped together into a cluster for that particular company. The company seed data that is included in each cluster belongs to or is associated with a particular company. One implementation of step  230  will be described below with reference to  FIGS. 5A and 5B . 
     At  240 , the clusterer and company profile generator module  160  scores all of the attributes within the cluster. For example, the values of attributes for each field can be scored based on how similar those values are to information extracted from the company webpage. One implementation of step  240  will be described below with reference to  FIGS. 5A and 5C . 
     At  250 , the clusterer and company profile generator module  160  can select highest scoring attributes within the cluster to convert the cluster into a company profile. In other words, the highest scoring attributes from the cluster are chose to be part of the company profile for the particular company. In one implementation, the clusterer and company profile generator module  160  can determine which fields to choose from multiple sources when converting each cluster data set into a company profile the clusterer. The company profile generator module  160  automatically selects the best values for a given field of the company profile from multiple sources and filters out any bad values. One implementation of step  250  will be described below with reference to  FIG. 5A . 
     At  255 , the clusterer and company profile generator module  160  can store the company profile in a repository with other company profiles for other companies. Following  255 , the method  200  proceeds to  260  is shown in  FIG. 2B . At  260 , a company profile enrichment process is performed to add additional information about each company to its corresponding company profile. This additional information is information that would not be directly available from the company seeds when a company profile is created, but is useful to include in a company profile to enhance or enrich it. The company profile enrichment process can include several steps  270 ,  280  and  290 . 
     At  270 , the company logo module  144  of the company enricher module  140  can extract candidate images from various sources and determine which image most closely corresponds to a company logo. The company logo module  144  can then add that image to the company profile as the company logo. The processing at  270  can be performed for each company that is part of the repository  124 . One implementation of step  270  will be described below with reference to  FIGS. 6A and 6B . 
     At  280 , the company executive determination module  146  can identify candidate webpages, determine/verify which candidate webpages belong to a particular company, and then extract executive details that correspond to company executives from at least one of the candidate webpages that was successfully verified. Again, the processing performed at  280  can be done for each company that is part of the repository  124 . One implementation of step  280  will be described below with reference to  FIG. 7 . 
     At  290 , the rating module  142  can automatically score or rate company profiles that are stored in the repository  124  to generate a score or rating for each company profile. The scores or ratings that are generated at  290  can then be used by applications when selecting company profiles (e.g., in the process of generating CRM records). For example, in one embodiment, a CRM system can use the company profiles are stored in the repository  124  when creating an account record. A CRM user can input information into a CRM application and the CRM application can then automatically retrieve one or more of the company profiles that have the highest score(s) or rating(s). The CRM user can then select one of those company profiles and the information for the selected company profile can then be auto populated into the account record. One implementation of step  290  will be described below with reference to  FIGS. 8 and 9 . 
     After all the company profiles have undergone the company profile enrichment processing, at step  295 , the enriched company profiles can be stored and persisted at the repository  124 . 
     At  298 , the quality gate and publisher module  170  can periodically or regularly verify the quality of at least some of the company information from one or more of the company profiles stored at the repository  124  prior to publishing the current version of the repository  124  to the data store  180 . In other words, when at least some of the company information stored as the current version of the repository  124  passes a quality test performed by the quality gate module  172 , then the company information that is stored as the current version of the repository  124  can then be published to the data store  180  by the publisher module  174 . Users, applications and services can then access any of the company profiles (or data that is part of any of the company profiles) and use it in conjunction with various applications and services. 
     On the other hand, when the samples of company information stored at the repository  124  fail the quality test performed by the quality gate module  172 , the company information that is currently stored at the repository  124  will not be published to the data store  180 , but will instead continue to be further enriched or improved. This can involve collecting additional seed data, enriching existing or newly collected seed data, or performing further company enrichment processing at the company enricher module  140  to improve the quality of the company information that is stored at the repository  124 . One implementation of step  298  will be described below with reference to  FIGS. 10 and 11 . 
     Company Name Generation 
       FIG. 3  is a flowchart of a method  300  performed by the seed enricher module  130  for automatically determining and selecting a company name in accordance with the disclosed embodiments. In some cases, seeds have websites without the company name or wrong company name. The method  300  can be used to discover a company name from a website (e.g., find the correct company name based on HTML from the company&#39;s home webpage). The method  300  can determine the correct company name even when a given webpage might contain different company names. For example, a webpage might hold social links—so LinkedIn or Facebook names might be extracted as company names. A webpage might hold different examples of customers or partners that are extracted as potential company names. To address this, different candidate company names are extracted based on different heuristics (name shaping, for example, copyright, company name suffixes such as INC. or LLC.), then all those candidate company names can be clustered together into groups that each cluster represent a potential company name for the website. Thereafter, each cluster is scored/ranked, and the best one is picked if it passes some threshold. The best company in that selected cluster can then be chosen as the company name. The method  300  will be described as it is applied to a single company; however, it should be appreciated that multiple instances of the method  300  can be executed at the same time or in parallel for multiple different companies. 
     With reference to method  300 , steps can be added, omitted, and/or performed simultaneously without departing from the scope of the appended claims. It should be appreciated that the method  300  may include any number of additional or alternative tasks, that the tasks shown in  FIG. 3  need not be performed in the illustrated order, and that the method  300  may be incorporated into a more comprehensive procedure or process having additional functionality not described in detail herein. Moreover, one or more of the tasks shown in  FIG. 3  could potentially be omitted from an embodiment of the method  300  as long as the intended overall functionality remains intact. It should also be understood that the illustrated method  300  can be stopped at any time. The method  300  is computer-implemented in that various tasks or steps that are performed in connection with the method  300  may be performed by software, hardware, firmware, or any combination thereof. For illustrative purposes, the following description of the method  300  may refer to elements mentioned above in connection with  FIG. 1 . In certain embodiments, some or all steps of this process, and/or substantially equivalent steps, are performed by execution of processor-readable instructions stored or included on a non-transitory processor-readable medium. For instance, in the description of  FIG. 3  that follows, the seed enricher module  130  will be described as performing various acts, tasks or steps, but it should be appreciated that this refers to processing system(s) and/or storage system(s) executing instructions to perform those various acts, tasks or steps. Depending on the implementation, some of the processing system(s) can be centrally located, or distributed among a number of server systems that work together. Furthermore, in the description of  FIG. 3 , a particular example is described in which the seed enricher module  130  performs certain actions by interacting with other elements of the system  100 . 
     The method  300  begins at  310  when the seed enricher module  130  downloads in HTML source file from the company&#39;s home webpage. At  320 , the seed enricher module  130  then extracts from the html source file: (1) candidate company names, and (2) support indicators (e.g., tags/identifiers) that are used (as support) to validate data when determining company names. In one embodiment, the seed enricher module  130  extracts tags, identifiers, and other support indicators that indicate that data from the HTML source file is a valid piece of information (e.g., information that can be used to validate data from the HTML source file). 
     For example, in one embodiment, the seed enricher module  130  attempts to find and extract possible company names from different sections of the home webpage such as from copyright sections, from a &lt;title&gt; tag, from meta tags (html), and from other textual parts of the company&#39;s home webpage. Identifiers and other support indicators can include pieces of information fetched from the website that can be used as support for determining the company name. Examples of identifiers and other support indicators can include information extracted from one or more Uniform Resource Locators (URLs) (e.g., microsoft.com→microsoft, aa.com→aa), from one or more social handles (“http://www.facebook.com/walmart”→walmart), from different HTML attributes (&lt;img=“logo.html” alt=“Vmware”&gt;→vmware), etc. 
     Each support indicator is an extracted name that has been determined to have similarities to the company name that was extracted from the home webpage of each company. A support indicator is a string/phrase that is very similar to the company name, but isn&#39;t a true candidate company name that is considered for selection since in some cases it is extracted from URL and therefore does not contain spaces or might be an abbreviation. The support indicators can be obtained from a number of different sources including company website URL or a social handle. 
     One important support indicator is the domain of the website. For example, a support indicator “microsoft” can be extracted from the URL “microsft.co.uk”. As another example, a support indicator “aa” can be extracted from the URL “aa.com”. Similarly, a support indicator “bofa” can be extracted from the URL “bofa.co.il”. A support indicator “salesforce” can be extracted from the URL “www.salesforce.com”. A support indicator “bankofamerica” can be extracted from the URL “www.bankofamerica.com”. These types of support indicators can be important because companies generally try to use a domain name that is similar (as much as possible) to its company name. For example, in the salesforce example this is a good candidate, but in the American Airlines example it is an abbreviation, and in the Bank of America example the string does not contain spaces, but it has a great similarity. So, if a cluster contains a support indicator it generally means that a similarity was found between some candidate in the cluster and that the support indicator. This type of support indicator is a very good signal that this is the correct company name. 
     Other types of support indicators can include social handles or social keys. For example, e.g., “https://www.facebook.com/vmware”→vmware); html images attributes from a company logo (e.g., &lt;i id=“z1-globe-md” class=“icon-att-globe” aria-label=“AT&amp;T home” role=“img”&gt;&lt;/i&gt;→“AT&amp;T”). A support indicator “bank-of-America” can be extracted from the URL “https://www.linkedin.com/company/bank-of-America/”. A support indicator “CCC” can be extracted from the URL “XXX”. A support indicator “americanairlines” can be extracted from the URL “https://www.facebook.com/AmericanAirlines/”. A support indicator “vmware” can be extracted from the URL “https://www.facebook.com/vmware/”. Other types of support indicators are also possible. 
     At  330 , the seed enricher module  130  applies a clustering algorithm at the seed level to cluster similar names and support indicators together. For example, in one embodiment, the seed enricher module  130  can fetch many possible company names, and cluster them together into different clusters for further processing. During the clustering process, each candidate company name is compared to each support indicator using similarity functions. Each cluster can include two types of objects—regular candidate company name and support indicators. In the scoring phase clusters that do NOT contain indicators are “punished,” while clusters that do are “rewarded.” 
     At  340 , the seed enricher module  130  scores each cluster using a heuristic formula based on one or more features derived from that cluster, and then selects the cluster having the highest score at  350 . For example, in one embodiment, the seed enricher module  130  can determine or compute a score for each cluster based on factors such as one or more of: (1) cluster size (e.g., how many similar candidate names were extracted); (2) source location where extracted candidate names come from within an HTML structure of each HTML webpage (e.g., a candidate from copyright section, a candidate from the alt attribute from the company logo (html meta data)); and (3) a number of support indicators included in that the cluster. The cluster size; location where the extracted information comes from within the HTML structure of the HTML webpage (e.g., copyright tag in the HTML is a strong candidate); whether the cluster includes at least one support indicator indicating that it is a valid piece of information, are not the only factors considered. Other factors, such as the weight of the edges (e.g., similarities between name/support indicators in the cluster), etc. can also be used. 
     At  360 , the seed enricher module  130  selects the highest-scoring or “best” name from the selected cluster (that was selected at  350 ) as the company name by applying selection rules that rank/prioritize different name options by order of importance. Factors used in scoring each of the company names within the selected cluster can include, but are not limited to, how many times the particular company name appears in the selected cluster, the length in number of characters of the particular company name, the location of the particular company name in the webpage, whether the particular company name has suffix such as INC., LLC, etc. For instance, when the selected cluster includes a full name (e.g., American Airlines) and an abbreviation (AA) of the full name as options, the seed enricher module  130  can select the full name since that is the higher ranked/prioritized name option of the two choices. 
     In one implementation, the clusters can be sorted by score, the highest scoring cluster can be selected, and a candidate company name (but not the support indicators) can be selected from the cluster. 
     Seed Enrichment Processing 
     In some cases, a company seed can have missing information or invalid information. For example, even once the company&#39;s website or home webpage is found, it may be missing information, or have invalid information that is outdated or incorrect. For instance, the Coca-Cola company seed might contain a valid phone number, but could be missing a valid address. To address this issue, the seed enricher module  130  can enrich each company seed by finding attributes and other enhancing information for enriching data that is part of a company seed. 
       FIG. 4  is a flowchart of a method  400  performed by the seed enricher module  130  for automatically enriching a company seed in accordance with the disclosed embodiments. The method  400  performs an enrichment process that fetches company information and validates existing information about a company seed. The enrichment process can be carried out in a pipeline form with multiple enrichment steps. Each enrichment step enriches the company seed using a different method. The method  400  will be described as it is applied to enrich a single company seed; however, it should be appreciated that multiple instances of the method  400  can be executed at the same time or in parallel to enrich multiple different company seeds. 
     With reference to method  400 , steps can be added, omitted, and/or performed simultaneously without departing from the scope of the appended claims. It should be appreciated that the method  400  may include any number of additional or alternative tasks, that the tasks shown in  FIG. 4  need not be performed in the illustrated order, and that the method  400  may be incorporated into a more comprehensive procedure or process having additional functionality not described in detail herein. Moreover, one or more of the tasks shown in  FIG. 4  could potentially be omitted from an embodiment of the method  400  as long as the intended overall functionality remains intact. It should also be understood that the illustrated method  400  can be stopped at any time. The method  400  is computer-implemented in that various tasks or steps that are performed in connection with the method  400  may be performed by software, hardware, firmware, or any combination thereof. For illustrative purposes, the following description of the method  400  may refer to elements mentioned above in connection with  FIG. 1 . In certain embodiments, some or all steps of this process, and/or substantially equivalent steps, are performed by execution of processor-readable instructions stored or included on a non-transitory processor-readable medium. For instance, in the description of  FIG. 4  that follows, the seed enricher module  130  and the repository  124  will be described as performing various acts, tasks or steps, but it should be appreciated that this refers to processing system(s) and/or storage system(s) of these entities executing instructions to perform those various acts, tasks or steps. Depending on the implementation, some of the processing system(s) can be centrally located, or distributed among a number of server systems that work together. Furthermore, in the description of  FIG. 4 , a particular example is described in which the seed enricher module  130  performs certain actions by interacting with other elements of the system  100 . 
     The method  400  begins at  410  when the seed enricher module  130  starts an enrichment process for company seed. Prior to enrichment, the company seed includes original/existing seed data or “original attributes.” 
     At  420 , a web crawler  132  of the seed enricher module  130  crawls the company website using, for example, a breadth first (BFS) traversal method to fetch information. The web crawler does not just crawl the home webpage for each company . . . we need to change this as follows: The web crawler processes each website that is associated with each collected seed by: (1) crawling a home webpage for the company associated with that collected seed to verify, based on similarity between company name and website name, that a website associated with that home page belongs to that company. When verification is successful, the web crawler (2) processes other webpages on the website to fetch information using different extractor algorithms. 
     To find missing seed data and or other instances of existing seed data, each webpage is crawled using multiple different extractor algorithms. Each extractor algorithm is specifically designed to fetch certain piece of information, such as a company phone number or company address. Each extractor algorithm is designed to fetch a specific attribute for that company that corresponds to either missing seed data for that collected seed or other instances of the original seed data for that collected seed. So, for each company seed, for each of the websites it holds, the home webpage is crawled in order to verify that the website indeed belongs to the company (based on name to website similarity algorithm), and once the website has been verified (based on it being sufficiently similar to the home webpage), the web crawler crawls more webpages on that website (e.g., contact us page, leadership page, about us page, etc.) to extract additional information. For example, in one embodiment, the web crawler  132  can extract attributes including, but not limited to, the company name, company phone number, company address, a Facebook® link to the company&#39;s Facebook page, a Twitter® link to the company&#39;s Twitter page, a LinkedIn® link to the company&#39;s LinkedIn page, and information describing related domains (e.g., related domains can be websites that can be reached from a company website via links). Some of the extractor algorithms are contextual, meaning that they use data from the original seed in order to find it in the websites (e.g., trying to find given phone in the website). Other extractor algorithms are non-contextual—searching data based on different patterns (e.g., phone regex). 
     The method  400  then proceeds to  430 , where one or more search engines  134  (e.g., Microsoft® Bing, Google® Chrome, Firefox®, etc.) fetches additional company information about the company. 
     The method  400  and proceeds to  440  where one or more geo-location services  136  or third-party APIs are used to structure unstructured data, such as company addresses, into structured data. Examples of third-party APIs can include search engine APIs (e.g., Bing), APIs of geo-location services (such as Here.com), embedding APIs (such as Embedly® API). Although not illustrated, the pipeline of the seed enricher module  130  could also include other enrichment steps that are not illustrated in  FIG. 1  or  FIG. 4 . For example, other examples of enrichment steps can include but are not limited to: using a phone directory to locate company phone, using a search engine to locate company website, using Wikipedia to get information about the company. 
     The method  400  and proceeds to step  450 , where the seed enricher module  130  enriches company seed with new information fetched by the crawler, other information fetched by the search engine, and new structured data information generated by the geolocation services/third-party APIs. The method  400  and proceeds to step  460 , where the seed enricher module  130  verifies or validates the new information that was used to enrich that seed at step  450  by comparing/corroborating it against original attributes (or “existing seed data”) from the company seed (that was part of the original company seed before enrichment). Similarly, if the information extracted from the website matches the original seed information, then both the original seed information and the new information extracted from the website are validated. Validation is performed after enrichment because even if the new information that was added to the enriched seed is invalid it is possible that it could later become valid when clustered together with different seeds because invalid data that came from different, independent data sources may later be considered valid in later steps. Any of the new information that is invalid can be given a lower score/confidence, and in later steps (e.g., clustering steps), a decision can be made, based on the confidence, whether to use this piece of data or not. 
     Clustering of Enriched Company Seeds and Conversion to Company Profiles 
     Once company seeds have been enriched there is a potentially large list of company seeds. Each company seed includes different pieces of information about companies (or company information). A method is needed to identify all the pieces of information that belong to the same company and group them together. To do so, a clustering method can be performed to identify all the pieces of information that belong to the same company and group them together into a single cluster. Each cluster can then be processed further to generate a company profile (or “company profile record”) for each company. 
       FIG. 5A  is a flowchart of a method  500  performed by the clusterer and company profile generator module  160  for automatically clustering company seed data from the enriched company seeds into a cluster and processing the company seed data of the cluster to generate a company profile in accordance with the disclosed embodiments. The method  500  will be described as it is applied to cluster company seed data into a cluster for a single company and generate a single company profile; however, it should be appreciated that multiple instances of the method  500  can be executed at the same time or in parallel to do the same for multiple different companies. 
     With reference to method  500 , steps can be added, omitted, and/or performed simultaneously without departing from the scope of the appended claims. It should be appreciated that the method  500  may include any number of additional or alternative tasks, that the tasks shown in  FIG. 5A  need not be performed in the illustrated order, and that the method  500  may be incorporated into a more comprehensive procedure or process having additional functionality not described in detail herein. Moreover, one or more of the tasks shown in  FIG. 5A  could potentially be omitted from an embodiment of the method  500  as long as the intended overall functionality remains intact. It should also be understood that the illustrated method  500  can be stopped at any time. The method  500  is computer-implemented in that various tasks or steps that are performed in connection with the method  500  may be performed by software, hardware, firmware, or any combination thereof. For illustrative purposes, the following description of the method  500  may refer to elements mentioned above in connection with  FIG. 1 . In certain embodiments, some or all steps of this process, and/or substantially equivalent steps, are performed by execution of processor-readable instructions stored or included on a non-transitory processor-readable medium. For instance, in the description of  FIG. 5A  that follows, the clusterer and company profile generator module  160  and the repository  124  will be described as performing various acts, tasks or steps, but it should be appreciated that this refers to processing system(s) and/or storage system(s) of these entities executing instructions to perform those various acts, tasks or steps. Depending on the implementation, some of the processing system(s) can be centrally located, or distributed among a number of server systems that work together. Furthermore, in the description of  FIG. 5A , a particular example is described in which the clusterer and company profile generator module  160  performs certain actions by interacting with other elements of the system  100 . 
     The method  500  begins when the clusterer and company profile generator module  160  receives multiple company seeds that have been enriched. Each enriched company seed can have its own original attributes and one or more websites, plus additional “extracted” attributes that have been extracted from each of the website(s) that are also part of that enriched company seed (i.e., each website can also have additional attributes that can be extracted). 
     At  510 , the clusterer module  162  converts the enriched company sees into a cluster for the company by grouping selected ones of the enriched company seeds together (into a cluster). One non-limiting embodiment of step  510  will be described below with reference to  FIG. 5B . 
     As used herein, the term “cluster” can refer to a group or collection of seeds that have been selected to be part of the cluster. The terms “cluster” and “cluster data set” can be used interchangeably herein. As used herein, a “company profile” can refer to a selected group of values from a particular cluster for different attributes used to describe a company. 
     For a given attribute, there may be many possible values that come from different sources, and therefore it is desirable to select the best possible values for each attribute for inclusion in the company profile. As will be explained below with reference to steps  520  through  540 , the profile generator module  164  can execute a company profile generation algorithm that processes a collection of seeds (that were grouped together at  510  during the clustering phase and should represent a single company), and automatically determines/selects which attributes to choose for converting the cluster into a company profile by selecting the best values for a given attribute (or field) from multiple sources. In this way, the profile generator module  164  can effectively filter out any bad values. For each attribute, the company generation algorithm executed by the profile generator module  164  can generate a score/value, and then select the attributes having the highest score/value for inclusion in the company profile. Any values that were not validated can be discarded. In one embodiment, if the attribute comes from highly accurate seed source, the value for that attribute can be selected, but if there are no such attributes then the attribute that has been validated as being the strongest in comparison to a corresponding attribute from the company&#39;s home webpage can be selected. 
     The method  500  then proceeds to step  520 , where the profile generator module  164  scores a value for each extracted attribute within the cluster to generate a score/rank for each value of each extracted attribute within the cluster. This can be done, for example, by comparing each extracted attribute to a corresponding information from the company&#39;s home webpage. In other words, the profile generator module  164  scores each value of each attribute within that cluster based on how similar each value is to corresponding information extracted from a home webpage for that company. One non-limiting example of an embodiment of step  520  will be described below with reference to  FIG. 5C . 
     At  530 , the profile generator module  164  selects the attributes having the highest score/ranks from the cluster for inclusion in a company profile for that cluster. In other words, for each attribute within that cluster, the profile generator module  164  can select the particular value for each attribute that has the highest score for inclusion in the company profile that corresponds to that cluster. The attributes that are selected can be either the original attributes or the extracted attributes depending on which one has the highest score/ranks. 
     At  540 , the profile generator module  164  generates a company profile for that company based on the selected attributes (from  530 ) for each of the attributes within the cluster. The profile generator module  164  can group all of the selected values from that cluster together to convert that cluster into a company profile for a particular company, where the company profile comprises a set of values that had the highest score for each attribute. 
       FIG. 5B  is a flowchart of a method  510  performed by the clusterer module  162  for automatically clustering company seed data from the enriched company seeds into a cluster in accordance with the disclosed embodiments. The method  510  will be described as it is applied to cluster company seed data into a cluster for a single company; however, it should be appreciated that multiple instances of the method  510  can be executed at the same time or in parallel to do the same for multiple different companies. With reference to method  510 , steps can be added, omitted, and/or performed simultaneously without departing from the scope of the appended claims. It should be appreciated that the method  510  may include any number of additional or alternative tasks, that the tasks shown in  FIG. 5B  need not be performed in the illustrated order, and that the method  510  may be incorporated into a more comprehensive procedure or process having additional functionality not described in detail herein. Moreover, one or more of the tasks shown in  FIG. 5B  could potentially be omitted from an embodiment of the method  510  as long as the intended overall functionality remains intact. It should also be understood that the illustrated method  510  can be stopped at anytime. The method  510  is computer-implemented in that various tasks or steps that are performed in connection with the method  510  may be performed by software, hardware, firmware, or any combination thereof. For illustrative purposes, the following description of the method  510  may refer to elements mentioned above in connection with  FIG. 1 . In certain embodiments, some or all steps of this process, and/or substantially equivalent steps, are performed by execution of processor-readable instructions stored or included on a non-transitory processor-readable medium. For instance, in the description of  FIG. 5B  that follows, the clusterer module  162  will be described as performing various acts, tasks or steps, but it should be appreciated that this refers to processing system(s) and/or storage system(s) of this entity executing instructions to perform those various acts, tasks or steps. Depending on the implementation, some of the processing system(s) can be centrally located, or distributed among a number of server systems that work together. Furthermore, in the description of  FIG. 5B , a particular example is described in which clusterer module  162  performs certain actions by interacting with other elements of the system  100 . 
     At  512 , a search engine (not illustrated in  FIG. 1 ) of the clusterer and company profile generator module  160  can index each of the enriched company seeds by its attributes (e.g., company name, website address, ticker, physical address, phone number, etc.) such that each enriched company seed has an index entry for each attribute to allow each of the enriched company seeds to be searchable by attributes. Each index entry represents a particular enriched company seed. This way searches can be performed for all seeds that have similar values for a certain attribute. Each entry in the index represents a company seed. For example, if you consider three seeds with the following values: id: 1|name: abc inc; id: 2|name: abc; and id: 3|name: ddd, then a search for name: “abc”, will return seeds with id (1,2). 
     At  514 , the clusterer module  162  further processes each enriched company seed. For each enriched company seed, the clusterer module  162  searches in the index for other enriched company seeds that have similar attributes (e.g., company name, website address, ticker, physical address, phone number, etc.) to find similar enriched company seeds that are candidates for potential inclusion in a cluster for a particular company. Some company seeds will not be candidates for inclusion because they do not include enough similar attributes to indicate that they might be associated with the same company and included in the cluster for that company. 
     The method  500  then proceeds to  516 . At  516 , for each seed pair of an enriched company seed (for a particular company) and a candidate company seed having similar attributes to that enriched company seed (and that may potentially be part of the same cluster), the clusterer module  162  can then compare values of the corresponding attributes of the two company seeds to calculate and extract features (e.g. domain equality, name similarity, ticker equality etc.) from each comparison (e.g., for each candidate company seed that was found at  514 , the clusterer module  162  compares the attributes of the candidate company seed to corresponding attributes of the original seed from the company&#39;s home website to compute and extract features). 
     For example, a feature can be calculated by comparing two corresponding attribute values form the two seeds. For instance, the attribute is company name, and if there are two seeds with names abc and abc inc, then they can have the following features could result: name_idf_similarity: 0.8 and name_char_similarity: 0.5. This same calculation/comparison could be done for any number of different attributes. 
     The clusterer module  162  can then run a more accurate matching algorithm, such as a pre-trained random forest machine learning model, on extracted features to determine whether that candidate company seed belongs to the same cluster as the enriched company seed (e.g., whether the two seeds belong to the same company). When the pre-trained random forest machine learning model determines, based on the extracted features, that the candidate company seed belongs to the same cluster as the enriched company seed, the clusterer module  162  adds that candidate company seed to the same cluster as the enriched company seed 
     In one embodiment, for each candidate company seed that was found at  514 , the clusterer module  162  compares the attributes of the candidate company seed to corresponding attributes of the original seed from the company&#39;s home website, computes features (e.g. domain equality, name similarity, ticker equality etc.) from each comparison, and applies features to a pre-trained random forest machine learning model that determines whether the seeds belong to the same company. 
     After the clusterer module  162  has evaluated all seed pairs at  516 , the method proceeds to  518 . At  518 , the clusterer module  162  executes a connective components algorithm to: collect any other candidate company seeds that share a connection to one or more of the other candidate company seeds that were added to the cluster of the enriched company seed for that particular company. This way all of the candidate company seeds that share a connection to one or more of the other candidate company seeds can be grouped into a single cluster for that particular company. 
       FIG. 5C  is a block diagram of a system  550  for generating scores/ranks for various attributes that are part of a cluster in accordance with the disclosed embodiments. In this example, the system  550  is illustrated as processing attributes from a particular enriched company seed that is part of a particular cluster. However, it should be appreciated that the same scoring process is applied to each company seed that is part of a particular cluster to generate scores/ranks for all of that cluster&#39;s attributes. This allows all of the attributes that are part of a particular cluster to be compared to determine which attributes have the highest score/ranks so that they can be selected for inclusion in the company profile. Furthermore, it should be noted that in this non-limiting example, that it is assumed that the cluster has five extracted attributes that are processed to generate a corresponding score/rank for each one. However, it should be appreciated that the cluster or an enriched company seed that is part of that cluster could have any number of extracted attributes that are to be scored by the system  550 . In addition, it should also be noted that a particular enriched company seed could have a number of attributes that is different than a number of attributes of another particular enriched company seed that is part of the particular cluster. Further, it should also be noted that a particular enriched company seed could have a number of attributes that is less than a number of attributes of the particular cluster. For example, if a particular cluster has a first seed with attributes A, B, C, and a second seed with attributes B, C, D, and a third seed with attributes D, E, F, then that particular cluster can have six attributes. The corresponding company profile can then also have six values for the six attributes that are selected from among the three different seeds. 
     In brief, the similarity of each extracted attribute is compared to a corresponding attribute of the original company seed to determine similarity, and then scaled based on a weight for that particular attribute. The weighted similarity for each attribute can then be summed by a website scoring function to generate a website score. The website score can then be multiplied by the attribute&#39;s similarity score for that attribute to generate an attribute score/rank for that attribute. 
     For example, the similarity module  553  can compare a value of the company name attribute  552  that was extracted from the enriched company seed to a value of the company name attribute  551  of the original company seed to determine a first attribute similarity score  554 . The first attribute similarity score  554  can then be scaled based on a first weight (e.g., 0.5) for that particular company name attribute to generate a first weighted similarity product  572 . Similarly, the similarity module  557  can compare a value of the website address attribute  556  that was extracted from the enriched company seed to a value of the website address attribute  555  of the original company seed to determine a second attribute similarity score  558 . The second attribute similarity score  558  can then be scaled based on a second weight (e.g., 0.3) for that particular website address attribute to generate a second weighted similarity product  574 . Likewise, the similarity module  561  can compare a value of the ticker attribute  560  that was extracted from the enriched company seed to a value of the ticker attribute  559  of the original company seed to determine a third attribute similarity score  562 . The third attribute similarity score  562  can then be scaled based on a third weight (e.g., 0.1) for that particular ticker attribute to generate a third weighted similarity product  576 . The similarity module  565  can compare a value of the physical address attribute  564  that was extracted from the enriched company seed to a value of the physical address attribute  563  of the original company seed to determine a fourth attribute similarity score  566 . The fourth attribute similarity score  566  can then be scaled based on a fourth weight (e.g., 0.1) for that particular physical address attribute to generate a fourth weighted similarity product  578 . The similarity module  569  can compare a value of the telephone number attribute  568  that was extracted from the enriched company seed to a value of the telephone number attribute  567  of the original company seed to determine a fifth attribute similarity score  570 . The fifth attribute similarity score  570  can then be scaled based on a fifth weight (e.g., 0.1) for that particular telephone number attribute to generate a fifth weighted similarity product  580 . 
     The weighted similarity products  572 ,  574 ,  576 ,  578 ,  580  for each attribute can then be summed by a website scoring function  582  to generate a website score  583 . In other words, all of the extracted attributes that are extracted from a company seed for a particular website are scored, weighted and then grouped together to generate score  583  to that website. In this example, the score  583  of the website is calculated by the weighted similarity of the name, website, ticker, address and phone number to the corresponding attributes of the original seeds. This is done for each seed/website in a cluster of seeds. 
     Then, for each attribute of the particular seed, the website score  583  can then be multiplied by an attribute similarity score for that attribute to generate an attribute score/rank for that attribute. 
     For example, for the company name attribute, the website score  583  can then be multiplied at  584  by the first attribute similarity score  554  for that company name attribute to generate an attribute score/rank  585  for the company name attribute that was extracted from the enriched company seed. If the attribute score/rank  585  for the company name attribute (that was extracted from the enriched company seed) is the highest scoring company name attribute among all of the company name attributes within the cluster then that company name attribute (that was extracted from the enriched company seed) will be selected as the company name attribute for the company profile. 
     Likewise, for the website address attribute, the website score  583  can then be multiplied at  586  by the second attribute similarity score  558  for that website address attribute to generate an attribute score/rank  587  for the website address attribute that was extracted from the enriched company seed. If the attribute score/rank  587  for the website address attribute (that was extracted from the enriched company seed) is the highest scoring website address attribute among all of the website address attributes within the cluster then that website address attribute (that was extracted from the enriched company seed) will be selected as the website address attribute for the company profile. 
     For the ticker attribute, the website score  583  can then be multiplied at  588  by the third attribute similarity score  562  for that ticker attribute to generate an attribute score/rank  589  for the ticker attribute that was extracted from the enriched company seed. If the attribute score/rank  589  for the ticker attribute (that was extracted from the enriched company seed) is the highest scoring ticker attribute among all of the ticker attributes within the cluster then that ticker attribute (that was extracted from the enriched company seed) will be selected as the ticker attribute for the company profile. 
     In addition, for the physical address attribute, the website score  583  can then be multiplied at  590  by the fourth attribute similarity score  566  for that physical address attribute to generate an attribute score/rank  591  for the physical address attribute that was extracted from the enriched company seed. If the attribute score/rank  591  for the physical address attribute (that was extracted from the enriched company seed) is the highest scoring physical address attribute among all of the physical address attributes within the cluster then that physical address attribute (that was extracted from the enriched company seed) will be selected as the physical address attribute for the company profile. 
     Finally, for the telephone number attribute, the website score  583  can then be multiplied at  592  by the fifth attribute similarity score  570  for that telephone number attribute to generate an attribute score/rank  593  for the telephone number attribute that was extracted from the enriched company seed. If the attribute score/rank  593  for the telephone number attribute (that was extracted from the enriched company seed) is the highest scoring telephone number attribute among all of the telephone number attributes within the cluster then that telephone number attribute (that was extracted from the enriched company seed) will be selected as the telephone number attribute for the company profile. 
     Company Enrichment Processing 
     As will now be described below with reference to  FIGS. 6A-9 , once all the company profiles have been formed or generated for each of the various companies, the company enricher module  140  can perform a variety of different company enrichment processes to further enrich the company profile for each company by adding additional information to that company profile. 
       FIGS. 6A and 6B  are collectively a flowchart of a method  600  performed by the company logo module  144  of the company enricher module  140  for extracting a plurality of images and then selecting one of the images from the plurality of images as a company logo in accordance with the disclosed embodiments. The company logo that is selected can then be added to the company profile for that company to supplement other information such as the company name, company website, address, phone number, etc. The method  600  will be described as it is applied to a single company; however, it should be appreciated that multiple instances of the method  600  can be executed at the same time or in parallel for multiple different companies. 
     With reference to method  600 , steps can be added, omitted, and/or performed simultaneously without departing from the scope of the appended claims. It should be appreciated that the method  600  may include any number of additional or alternative tasks, that the tasks shown in  FIGS. 6A and 6B  need not be performed in the illustrated order, and that the method  600  may be incorporated into a more comprehensive procedure or process having additional functionality not described in detail herein. Moreover, one or more of the tasks shown in  FIGS. 6A and 6B  could potentially be omitted from an embodiment of the method  600  as long as the intended overall functionality remains intact. It should also be understood that the illustrated method  600  can be stopped at any time. The method  600  is computer-implemented in that various tasks or steps that are performed in connection with the method  600  may be performed by software, hardware, firmware, or any combination thereof. For illustrative purposes, the following description of the method  600  may refer to elements mentioned above in connection with  FIG. 1 . In certain embodiments, some or all steps of this process, and/or substantially equivalent steps, are performed by execution of processor-readable instructions stored or included on a non-transitory processor-readable medium. For instance, in the description of  FIGS. 6A and 6B  that follows, the company logo module  144  will be described as performing various acts, tasks or steps, but it should be appreciated that this refers to processing system(s) and/or storage system(s) of this entity executing instructions to perform those various acts, tasks or steps. Depending on the implementation, some of the processing system(s) can be centrally located, or distributed among a number of server systems that work together. Furthermore, in the description of  FIGS. 6A and 6B , a particular example is described in which the company logo module  144  performs certain actions by interacting with other elements of the system  100 . 
     The method  600  begins at  602 , when the company logo module  144  executes a query via a search engine to search a web-based data source, such as Wikipedia, for webpages that reference a company. For example, in one non-limiting implementation, the company&#39;s wiki pages can be searched via search engine  134  (e.g., Bing) by a query that has been developed. 
     At  604 , the company logo module  144  scrapes search results to extract a company name and a company website from one or more of the webpages that reference a company. At  606  the company logo module  144  compares the extracted company name in the extracted company website to corresponding fields within the company profile for this particular company. For example, in one non-limiting implementation, as a search engine returns many options, the results are scraped one by one. A name &amp; website are extracted from the wiki page and compared to the company profile that was input. 
     At  608  the company logo module  144  determines whether the extracted company name and extracted company website match with the corresponding attributes/fields from the company profile. 
     When there is a match at  608 , at  610  the company logo module  144  extracts a logo from the web-based data source. For example, in one implementation, the company logo module  144  can extract a logo from an information box within a Wikipedia webpage based on observation of HTML domain information. 
     If there is not match (at  608 ), then the company logo module  144 , attempts to extract candidate images for the company logo from the company&#39;s website. In other words, when company logo module  144  determines (at  608 ) that the extracted company name and extracted company website did not match the corresponding fields within the company profile, the method  600  proceeds to  612  where the company logo module  144  crawls the company website specified in the company profile to extract an HTML file and any imported CSS files from the company website. For example, in one implementation, based on the website given in the input company profile, a two-level crawling process can be performed—home page html and imported CSS files. 
     The method  600  and proceeds to  614  where the company logo module  144  parses the HTML file and imported CSS files to extract candidate images from the company website. For example, in one implementation, parsers for each file type (html/CSS) can then be used to extract candidate logo images. 
     At  616 , the company logo module  144  filters candidate images and removes bad image patterns. For example, in one implementation, filtering is performed to find bad image patterns that have been learned (such as placeholders/home buttons, etc.). 
     At  618 , the company logo module  144  derives meta-features for each remaining candidate image, such as, image name, image XPATH expression, html tags and attributes, whether it includes an HREF attribute that directs to the home page, size (dimensions), location and many other signals. XPath is a query language defined by the World Wide Web Consortium for selecting nodes from an XML document. The XPath language is based on a tree representation of the XML document, and provides the ability to navigate around the tree, selecting nodes by a variety of criteria. In popular use (though not in the official specification), an XPath expression is often referred to simply as “an XPath”. In addition, XPath may be used to compute values (e.g., strings, numbers, or Boolean values) from the content of an XML document. The HREF is an attribute of the anchor tag, which is also used to identify sections within a document. The HREF contains two components: the URL, which is the actual link, and the clickable text that appears on the page, called the “anchor text.” 
     At  620 , the company logo module  144  scores each remaining candidate image based on the derived meta-features. For example, in one embodiment, the company logo module  144  can compute a score for each candidate logo by calculating numerical values for each of the derived meta-features (for each candidate logo), then multiplying each numerical value by a constant factor (or weight) to generate a product, and then generating a final score for that candidate logo by summing each of products. In one non-limiting implementation, the derived meta-features that are calculated and the corresponding constant factors (in parenthesis) for each can be as follows: 
     company name in an alt tag (constant factor=8.0)—alt is an HTML tag used to describe the contents of an image. With this feature the similarity between the company name and the description in the alt tag can be calculated. 
     company name in name tag (constant factor=8.0)—similar to the alt tag just with the name tag. 
     whether the word ‘logo’ is contained in the alt tag (constant factor 5.0). 
     logo name in URL (constant factor=5.0)—determines if the name of the page that contains the image contains the word ‘logo’. 
     company name in title tag (constant factor=6.0)—same as alt tag just with title tag. 
     company name in URL (constant factor=15.0)—determines if the name of the page that contains the image contains the company name. 
     relative position in HTML (constant factor=2.0)—measures the distance of the image tag in HTML tree from the root. 
     relative position in CSS (constant factor=1.0)—measures the distance of the image tag in CSS tree from the root. 
     ‘logo’ in HTML image XPath (constant factor=2.0)—determines whether ‘logo’ is in the HTML XPath of the image. 
     HTML XPath length (constant factor=1.0) 
     homepage (constant factor=5.0)—determines whether the image was found in the company homepage. 
     external page (constant factor=−1000.0)—determines whether the image was found in external page of the company website 
     dangerous words in URL (constant factor=−1000.0)—determines whether image URL contains dangerous words. 
     forbidden XPath filter (constant factor=−1000.0)—determines whether image XPath has forbidden tags. 
     This is one non-limiting example of derived meta-features and corresponding weights that can be used to compute a score for each logo. 
     The method  600  and proceeds to  622  where the company logo module  144  selects the top remaining candidate images having the highest scores for further processing and comparison to the logo that were extracted at step  610 . For example, in one non-limiting implementation, a number of top remaining candidate images (e.g., the top 20) can be selected to move forward with in order to download the resource itself and extract content features. 
     Method  600  and proceeds to  624 , where the company logo module  144  extracts content features for the top remaining candidate images that were selected at  622 . For example, in one non-limiting implementation, the company logo module  144  can extract content features and determine: (1) whether each top remaining candidate image is a digital image (e.g., a support vector machine (SVM) learning algorithm separates digital from natural images), (2) actual content dimensions, (3) brightness (e.g., some logos are transparent so those are filtered out), etc. In machine learning, support vector machines (SVMs) are supervised learning models with associated learning algorithms that analyze data used for classification and regression analysis. 
     Based on the content features and the meta-features, at  626 , the company logo module  144  can select either one of the top remaining candidate images (from  622 ) or the logo that was extracted at  610  as the company logo. For example, in one embodiment, the company logo module  144  can select whichever one of the top remaining candidate images or logo has the highest score and meets size criteria. In one embodiment, the logo that was extracted at  610  has a fixed score, and the each one of the top remaining candidate images (from  622 ) from the websites have a score that varies based on the meta features. The one of these having highest score can then be selected. 
       FIG. 7  is a flowchart of a method  700  performed by the company executive determination module  146  for automatically generating executive profile information for a company from multiple sources in accordance with the disclosed embodiments. The executive profile information that is generated can then be added to the company profile for that company to supplement other information such as the company name, company website, address, phone number, logo, etc. The method  700  will be described as it is applied to a single company; however, it should be appreciated that multiple instances of the method  700  can be executed at the same time or in parallel for multiple different companies to automatically generate executive profile information for each of those companies. 
     With reference to method  700 , steps can be added, omitted, and/or performed simultaneously without departing from the scope of the appended claims. It should be appreciated that the method  700  may include any number of additional or alternative tasks, that the tasks shown in  FIG. 7  need not be performed in the illustrated order, and that the method  700  may be incorporated into a more comprehensive procedure or process having additional functionality not described in detail herein. Moreover, one or more of the tasks shown in  FIG. 7  could potentially be omitted from an embodiment of the method  700  as long as the intended overall functionality remains intact. It should also be understood that the illustrated method  700  can be stopped at any time. The method  700  is computer-implemented in that various tasks or steps that are performed in connection with the method  700  may be performed by software, hardware, firmware, or any combination thereof. For illustrative purposes, the following description of the method  700  may refer to elements mentioned above in connection with  FIG. 1 . In certain embodiments, some or all steps of this process, and/or substantially equivalent steps, are performed by execution of processor-readable instructions stored or included on a non-transitory processor-readable medium. For instance, in the description of  FIG. 7  that follows, the company executive determination module  146  will be described as performing various acts, tasks or steps, but it should be appreciated that this refers to processing system(s) and/or memory of this entity executing instructions to perform those various acts, tasks or steps. Depending on the implementation, some of the processing system(s) can be centrally located, or distributed among a number of server systems that work together. 
     The method  700  begins at  710  where the company executive determination module  146  uses a search engine API to search for candidate webpages that contain information about executives of the company. For example, in one non-limiting embodiment, Bing® search engine API can be used to locate candidate executive pages (e.g., use the company name+a number of key words as the search string). The method then proceeds to  720  where the company executive determination module  146  downloads candidate webpages and extracts data/features from those candidate webpages. 
     At  730 , the company executive determination module  146  executes a random forest machine learning model to verify whether each of the candidate webpages belongs to the particular company by comparing webpage&#39;s domain name to the company domain; and then determine whether each of the verified candidate webpages are executive webpages by executing a random forest machine learning model to identify if each candidate webpage is an executive page that belongs to the particular company. In one embodiment, this is a two-phase process. In the first phase, the webpage domain name is compared to the company domain to determine if they match. A match means that the verified candidate webpage belongs to the particular company. Then, a machine learning algorithm, which is a Random Forest ML model in one non-limiting embodiment, is applied in order to determine if this verified candidate webpage is indeed an executive page. In one implementation, the random forest machine learning model considers features such as a bag of words in the verified candidate webpage, the number of times the person&#39;s name appears in the verified candidate webpage, the number of job titles in the verified candidate webpage, the type of job titles (e.g., mostly C-level) in the verified candidate webpage, the number of photos in the verified candidate webpage, and other signals. The bag-of-words model is a simplifying representation used in natural language processing and information retrieval (IR). In this model, a text (such as a sentence or a document) is represented as the bag (multiset) of its words, disregarding grammar and even word order but keeping multiplicity. 
     For example, in one non-limiting embodiment, a random forest machine learning model is used to identify if each candidate webpage is indeed an executive page that belongs to the company. Random forests or random decision forests are an ensemble learning method for classification, regression and other tasks, that operate by constructing a multitude of decision trees at training time and outputting the class that is the mode of the classes (classification) or mean prediction (regression) of the individual trees. The random forest machine learning model include words from each of the candidate webpages such as: title, body and URL. The words and their n-grams are encoded using a Word2Vec (w2v) neural network to construct vector representations of words and used as the model features. 
     Word2Vec is a group of models used for constructing vector representations of words, also known as word embeddings. Word2Vec (w2v) uses a shallow neural network to learn how words are used in a particular text corpus. These models are shallow, two-layer neural networks that are trained to reconstruct linguistic contexts of words. Word2vec takes as its input a large corpus of text and produces a vector space, typically of several hundred dimensions, with each unique word in the corpus being assigned a corresponding vector in the space. Word vectors are positioned in the vector space such that words that share common contexts in the corpus are located in close proximity to one another in the space. The output of w2v is a matrix of vectors, with each vector (column) representing a word in the corpus and providing a numerical description of how that word is used in context. Given a large enough corpus, two words that are used similarly will have similar vector representations. For example, a corpus may employ the words ‘student’ and ‘pupil’ to mean the same thing, but never use them together in a sentence. If provided with enough information, w2v would be able to learn the context of these two concepts and make their vectors numerically similar (i.e. place them together in semantic space). Given that w2v provides the semantic description of words in a corpora as numeric vectors, once all words have been mapped into the vector space it becomes possible to use vector math to find words that have similar semantics or more complex relationships. 
     At  740 , the company executive determination module  146  analyzes the verified candidate webpages to extract executive details from the verified candidate webpages. In other words, after  730 , each of the verified candidate webpages can be analyzed (at  740 ) to extract executive details from each. Each of the verified candidate webpages is a webpage that has already been matched to the company and that a classifier has been applied to in order to determine that it is an executive page. The methodology used to analyze the verified candidate webpages can vary depending on the implementation. In one embodiment, two extraction strategies can be applied during the extraction phase. In accordance with one extraction strategy, a person name extractor (an algorithm that based on text extracts words/phrases that are suspected as a person name) is used to extract different candidate names from the HTML document, and then, for each name, performs a search (based on the DOM graph) around that name to find other attributes (e.g., job title) to create a candidate. In accordance with another extraction strategy, a person name and job title extractor (an algorithm that based on text extracts words/phrases that are suspected as a person name and job title) is used to extrapolate the HTML patterns in the page and to extract different candidate names/job titles from the HTML document, and then, for each name/job title combination, performs a search (based on the DOM graph) around the name/job title to find other attributes to create a candidate. In this regard, a candidate is a vector of data that includes different attributes such as name, job title, profile image, biograph, etc. A clustering algorithm can be applied in order to remove duplicate candidates. 
     In one embodiment, the company executive determination module  146  performs steps  750  through  780  to analyze each of the verified candidate webpages and extract executive details from those verified candidate webpages. The method described at steps  750  through  780  describes how a single verified candidate webpage is analyzed to extract executive details. However, it will be appreciated that step  750  through  780  can be performed with respect to each verified candidate webpage to analyze it and extract executive details from that verified candidate webpage. 
     At  750 , the company executive determination module  146  marks elements in each of the verified candidate webpages that are suspected to be people&#39;s names and job titles. At  760 , the company executive determination module  146  traverses the HTML tree of each verified candidate webpage to locate subgraph pattern(s) that correspond to people&#39;s names and job titles. 
     At  770 , the company executive determination module  146  searches the HTML tree of each verified candidate webpage to locate similar patterns that correspond to names of people and job titles. At  780 , the company executive determination module  146  extracts people&#39;s names and job titles from the HTML tree (of each verified candidate webpage) and then adds the extracted names and job titles to the company profile for that particular company as executive information. 
       FIG. 8  is a flowchart of a method  800  performed by the rating module  142  for rating company profiles and then using a highest rated company to create a CRM record in a CRM system in accordance with the disclosed embodiments. The method  800  will be described as it is applied to a single company; however, it should be appreciated that multiple instances of the method  800  can be executed at the same time or in parallel for multiple different companies. With reference to method  800 , steps can be added, omitted, and/or performed simultaneously without departing from the scope of the appended claims. It should be appreciated that the method  800  may include any number of additional or alternative tasks, that the tasks shown in  FIG. 8  need not be performed in the illustrated order, and that the method  800  may be incorporated into a more comprehensive procedure or process having additional functionality not described in detail herein. Moreover, one or more of the tasks shown in  FIG. 8  could potentially be omitted from an embodiment of the method  800  as long as the intended overall functionality remains intact. It should also be understood that the illustrated method  800  can be stopped at any time. The method  800  is computer-implemented in that various tasks or steps that are performed in connection with the method  800  may be performed by software, hardware, firmware, or any combination thereof. For illustrative purposes, the following description of the method  800  may refer to elements mentioned above in connection with  FIG. 1 . In certain embodiments, some or all steps of this process, and/or substantially equivalent steps, are performed by execution of processor-readable instructions stored or included on a non-transitory processor-readable medium. For instance, in the description of  FIG. 8  that follows, the rating module  142  and a CRM system will be described as performing various acts, tasks or steps, but it should be appreciated that this refers to processing system(s) and/or memory of these entities executing instructions to perform those various acts, tasks or steps. Depending on the implementation, some of the processing system(s) can be centrally located, or distributed among a number of server systems that work together. Various acts, tasks or steps  FIG. 8  will be described in further below with reference to  FIGS. 9 and 12-14 . 
     At step  810 , the rating module  142  can generate a rating score for each company that has a company profile stored in the repository  124 . The company profiles can eventually be used to autofill CRM records created by CRM users, and the rating scores for each company can be used to help the CRM users pick which company profiles to utilize to create the CRM records. The methodology for generating the rating score at rating module  142  can vary depending on the implementation, and one non-limiting embodiment will be described below with reference to  FIG. 9 . 
     After the rating scores for each company have been generated and added to their respective company profiles, the rating scores can then be used as part of a method described with reference to steps  820  through  860  of  FIG. 8 . In this regard, it should be appreciated that the step  810  is performed to generate a rating score for each company profile in the repository  124  can be performed as a separate method that takes place prior to steps  820  through  860 , but for sake of simplicity step  810  is described in conjunction with steps  820  through  860  of  FIG. 8 . In one embodiment, a CRM application can automatically generate a query in response to the user input via a user interface of the CRM application that is used to create the new CRM record in the CRM system. The user input can be a prefix or other identifier that represents a company name. When a CRM user wants to create new account record, she/he opens a window and starts to enter details about the account. One of the fields is company name. When the user types some prefix a query is generated to search for records in the repository that match the prefix, and the records are found they can be sorted via rating scores. 
     At step  820 , a CRM user creates a new record in a CRM system. An example of certain features of the CRM system will be described below with reference to  FIGS. 12-14 . The type of record can vary depending on the implementation and if you non-limiting examples can include account records, lead records, opportunity records, etc. For sake of illustrating example, in the description of steps  830 - 860  that follows, it will be assumed that the CRM user has created a new account record at  820 . When the CRM user creates a new account record, the CRM user can enter a prefix that represents a company name. 
     At step  830 , based on the prefix entered, the application can then search the repository  124  for the top candidate company profiles having the highest rating scores. The number of top candidate company profiles can vary depending on the implementation, and can be configured or specified by the CRM user of the application. For example, in one non-limiting implementation, the number of top candidate company profiles could be the top five candidate company profiles sorted based on scores from highest to lowest. The top candidate company profiles can be suggested to the user starting with the most interesting/popular company first based on the ratings/scores for each of the top candidate company profiles. 
     At step  840 , the top candidate company profiles are returned to the CRM system and displayed to the CRM user via user interface of the application sorted based on their scores from highest to lowest so that the CRM user can select one of the top candidate company profiles and use it to create the new account record. 
     At step  850 , the CRM user can select one of the top candidate company profiles that the CRM user would like to use, and at step  860 , data (e.g., name, website, phone, address, etc.) from the selected company profile is automatically filled or auto populated into the new account record to auto populate the new account record with the data for the selected company profile. 
       FIG. 9  is a block diagram of a company scoring generator  900  that can be executed at the rating module  142  to rate company profiles that are stored in a repository  124  in accordance with the disclosed embodiments. 
     As illustrated in  FIG. 9 , the rating module  142  includes a company scoring function  940  that processes various input metrics  902 ,  904 ,  906 ,  908 ,  910 ,  912  to generate a rating score  950  for company profile that is stored in the repository  124 . The rating score  950  represent popularity, interest, and size of the company. Although the company scoring generator  900  is described as it is applied to a single company, it should be appreciated that multiple instances of the company scoring generator  900  can be executed at the same time or in parallel to generate scores for multiple different companies. 
     The input metrics  902 ,  904 ,  906 ,  908 ,  910 ,  912  that are input into the company scoring function  940  can vary depending on the specific implementation. The input metrics  902 ,  904 ,  906 ,  908 ,  910 ,  912  can come from the company profile for the company. In this non-limiting example, the input metrics include a cluster size  902  (e.g., the number of company seeds that a particular company profile has in a cluster for that particular company), a reliability score that indicates reliability of each of the seed sources that reflects data correctness of that seed source (e.g., some source are more reliable—for example Fortune 1000 companies or CRM system data), a number of company news items  906  that indicates how many news items have been collected on a particular company (e.g., an internal news API can be invoked to see how many news items were received as responses), company size  908  in terms of number of employees; (e.g., extract the company size using a LinkedIn® company size code that indicates the relative size of the company self-employed, 1-10 employees, 11-50 employees, 51-200 employees, 2011-500 employees, 501-1000 employees, 1001-5000 employees, 5001-10000 employees, 10001+ employees, etc.), and popularity metric  910  (e.g., that indicates how many times the particular company profile was selected in the past by other CRM users). The number of company news items can be obtained from a service that collects news items for each company profile in the repository. For instance, when a customer enters to some account page, the account&#39;s data (e.g., name and website) are automatically receive, and the query data can be matched the repository. Upon receiving a match, news item(s) that have been collected can then be returned. The number of news items that return is an indicator of how popular the company is in the news. However, it should be appreciated that any number of other signals  912  for each company could also be input into the company scoring function  940 . 
     In one non-limiting embodiment, a weight (e.g., a constant factor) is applied to each of the input metrics  902 ,  904 ,  906 ,  908 ,  910 ,  912  to scale the relative importance of that particular input with respect to each of the other input metrics. So, in this particular example a weight  922  can be applied to the cluster size  902 , a weight  924  can be applied to the reliability of the seed sources  904 , a weight  926  can be applied to the number of news items  906 , a weight  928  can be applied to the company size  908 , and a weight  930  can be applied to the user feedback  910 . In one embodiment, the value of each input can be multiplied by its corresponding weight (e.g., a constant factor) to generate a product, and then all of the products can be summed to generate a rating score  950  for that particular company profile. After rating scores have been generated for all the different company profiles, all of the different company profiles can then be ranked based on their respective rating scores. 
     In other embodiments, the input metrics can include other signals that are not explicitly shown in  FIG. 9  due to page constraints, such as, one or more of, an indication of whether the company profile includes a ticker symbol that indicates that the particular company is publicly traded; an indication of whether the company profile includes a phone number for that particular company; an indication of whether the company profile includes a physical address for that particular company; an indication of whether the company profile includes various types of social media accounts for that particular company (e.g., Facebook® LinkedIn® and/or Twitter® accounts); an indication of whether the company profile includes an entry or a page for that particular company in a web-based encyclopedia (e.g., a Wikipedia® page) hosted on the World Wide Web; and an indication of whether the company profile includes a website having a top-level domain name that is one of .edu, .gov and org (e.g., the website is .edu, .gov and org website). For example, a scoring penalty can be assessed when the top-level domain name that is one of .edu, .gov and org because this tends to indicate that the company is a non-profit organization. The embodiment of  FIG. 9  is non-limiting. In one implementation, the input metrics and their corresponding weights (in parenthesis) can include:
         cluster size in terms of the number of company seeds the company has (weight=3.0)   seed source reliability (weight=5.0)—A static score for each seed source according to crowd source testing performed that reflects data correctness of that seed source.   Number of company news items (weight=5.0)—the amount for news collected on a company.   Company size (weight=15.0)—The size of the company according to LinkedIn®.   ticker (weight=5.0)—determines whether the company is traded.   company phone (weight=2.0)   company address (weight=2.0)   Facebook® (weight=2.0)—determines whether a company has a Facebook® account   LinkedIn® (weight=2.0)—determines whether a company has a LinkedIn® account   Twitter® (weight=2.0)—determines whether a company has a Twitter® account   Wikipedia® (weight=2.0)—determines whether a company has a Wikipedia® page   .edu, .gov and org websites (weight=−1000)—Determines if the company website is .edu, .gov or .org.       

     Repository Publication 
     The company seed collection, enrichment and clustering system  100  executes continuously or regularly to update the company profiles that are stored in the repository  124 . In other words, the information or company data that stored within the repository  124  is constantly changing. At any given time, a particular version of the company profiles is stored at repository  124 . Eventually, the repository  124  can be published to the data store  180 , where applications, services and users can utilize these company profiles (that are part of that particular version of the repository  124 ) in conjunction with other applications, such as CRM applications, etc. 
     However, the particular version of company profiles stored at the repository  124  is not available for use by external users, applications and services until it is published to the data store  180 . The particular version of the repository  124  can be published to the data store  180  after certain conditions are met or a decision is made by an administrator to publish that version of the repository  124 . For example, in some implementations, the particular version of the repository  124  can be published to the data store  180  after a certain amount of time has elapsed since it was created. This approach assumes that if the system  100  executes for a certain amount of time the company profiles stored at the repository  124  has been sufficiently developed and will be sufficiently complete and accurate to warrant publication to the data store  180 . However, it is desirable to verify the quality of at least some of the company profiles stored at the repository  124  prior to publishing that version of the repository  124  to the data store  180 . In addition, it is also desirable to make sure that the quality of the data in the repository  180  is maintained between versions. 
     In accordance with the disclosed embodiments, the quality gate and publisher module  170  ( FIG. 1 ) applies a set of statistical methods and crowd sourcing methods in order to determine the quality of a candidate repository. 
     For example, the quality gate module  172  can perform crowd sourcing to select a sample set of company names from the repository  124 , and then determine a name match percentage. In this context, “name match percentage” can refer to the percentage of company names for the selected ones of the company profiles that match corresponding company names obtained from company websites. Name match percentage can be determined by crowd sourcing. For example, in one implementation, a link to the company website is sent to many users, who are then asked if a company name that is also provided matches the name in the website. A higher name match percentage reflects a higher quality of the repository  124 , whereas a lower name match percentage reflects a lower quality of the repository  124 . 
     As another example, the quality gate module  172  can determine attribute coverage percentage of the company profiles in the repository  124 . In this context, “attribute coverage percentage” can refer to the percentage or number of company profiles that have a value for each possible attribute type. A higher percentage or number reflects better attribute coverage percentage and hence higher quality of the current version of the repository. A lower percentage or number reflects weaker attribute coverage percentage and hence lower quality of the current version of the repository. 
     As another example, the quality gate module  172  can determine attribute duplication percentage among the company profiles in the repository  124 . In this context, “attribute duplication percentage” can refer to the percentage or number of company profiles that exhibit attribute duplication by having duplicate values for the same attribute type (e.g., have the same or duplicate values for common attributes like website or telephone number). A lower attribute duplication percentage reflects a higher quality of the current version of the repository, and a higher attribute duplication percentage reflects a lower quality of the current version of the repository. While duplication may not be bad in some cases (e.g., two companies may have the same address, or name in different states), the duplication of certain attributes (e.g., website, phone) can be and is viewed negatively as a penalty. 
     As another example, the quality gate module  172  can select/sample various attributes from the company profiles in the repository  124 , and then use crowd sourcing technologies to ask a group of users to score the formatting of the values of those selected attributes. In one embodiment, each user submits a score for a “formatting value” for each attribute. The quality gate module  172  can then average the scores from the group of users for each of the selected attributes to generate a mean score for each attribute (e.g., an average score value for each attribute). The quality gate module  172  can then analyze the mean scores for each attribute to determine a composite or overall display formatting score for the various attributes that were selected/sampled from the company profiles in the repository  124 . In one embodiment, the system then computes a percentage of the attributes having a score above a threshold. In this context, “overall display formatting score” can refer to the percentage or number of the sampled attributes that have a mean score greater than a threshold (e.g., percentage of the set of attributes that have an average score greater than a threshold). A higher overall display formatting score reflects a higher quality of the repository, whereas a lower overall display formatting score reflects a lower quality of the repository. 
     In one embodiment, geo-statistical measures can also be used as one of the variables when computing the repository quality score (i.e., to determine “quality” of the repository, or consistency with past versions of the repository). For example, geographical coverage of data in the repository can be evaluated (e.g., we expect of have more than certain amount of companies from the US and another amount in CANADA). In one implementation, the quality gate module  172  can perform geo-statistical analysis to determine a geographical distribution of the company profiles in the repository  124 . In this context, “geographical distribution” can refer to the percentages or numbers of company profiles from different regions of interest. For example, depending on the implementation, the regions of interest could be different cities within a state, different states within a country, different countries within a continent, or different continents within the world. Regardless of the implementation, the percentages or numbers of company profiles from different regions of interest for a particular version of the repository can then be compared to the percentages or numbers of company profiles from different regions of interest from one or more past versions of the repository to determine consistency of the current version of the repository with past version(s) of the repository. If a big drop in certain region is observed that could affect customer experience in that region, then that indicates that the repository is of a lower quality and it might be due to bug that needs to be checked. The quality gate module  172  can also determine if the number of companies in the repository is bigger than a threshold. 
     The quality gate module  172  can then scale the computed values for the name match percentage, attribute coverage percentage, attribute duplication percentage, overall display formatting score, the number of companies that overlap, etc. according to weights that are defined for each metric, and then use the scaled values to compute a repository quality score (e.g., a sum of the scaled values). The repository quality score can then be compared to a threshold. If the repository quality score is greater than or equal to the threshold, the current version of the repository is deemed to be of sufficiently high quality to allow for publication to the data store  180 . As such, once the current version of the repository passes the quality test, the publisher module  174  can automatically publish it to data store (S3)  180 . In one embodiment, the data store  180  can be a data lake. The data lake  180  is a centralized repository that stores structured and unstructured data for the company profiles at any scale. Data can be stored in its natural format (e.g., object blobs or files). A data lake can be a single store of all enterprise data including raw copies of source system data and transformed data used for tasks such as reporting, visualization, analytics and machine learning. A data lake can include structured data from relational databases (rows and columns), semi-structured data (CSV, logs, XML, JSON), unstructured data (emails, documents, PDFs) and binary data (images, audio, video). As such, data can be stored as-is, without having to first structure the data, and users can then access the data for the company profiles and use it for various purposes. For example, users can use the data for the company profiles in their own applications, or run different types of analytics—from dashboards and visualizations to big data processing, real-time analytics, and machine learning to guide better decisions. One example of technology used to host a data lake can store a data lake is the distributed file system used in Apache Hadoop. Many companies also use cloud storage services such as Azure Data Lake and Amazon S3. 
       FIG. 10  is a flowchart of a method  1000  performed by the quality gate and publisher module  170  for determining quality of a version of a repository  124  and determining whether to publish that version of the repository  124  depending on its quality score in accordance with the disclosed embodiments. The method  1000  can be used to verify the quality of company information that is stored in a particular version of the repository  124 , and to generate a score that reflects the quality of the repository  124 . This quality score can then be compared to a threshold to decide whether this particular version of the repository  124  passes a quality test, and if so, that particular version of the repository  124  is ready for publication to the data store  180  so that company profiles and company data can be accessed and used by users, applications and services. The method  1000  will be described as it is applied to a single version of a repository  124 ; however, it should be appreciated that the method  1000  can be executed against multiple different versions of a repository  124 . 
     With reference to method  1000 , steps can be added, omitted, and/or performed simultaneously without departing from the scope of the appended claims. It should be appreciated that the method  1000  may include any number of additional or alternative tasks, that the tasks shown in  FIG. 10  need not be performed in the illustrated order, and that the method  1000  may be incorporated into a more comprehensive procedure or process having additional functionality not described in detail herein. Moreover, one or more of the tasks shown in  FIG. 10  could potentially be omitted from an embodiment of the method  1000  as long as the intended overall functionality remains intact. It should also be understood that the illustrated method  1000  can be stopped at any time. The method  1000  is computer-implemented in that various tasks or steps that are performed in connection with the method  1000  may be performed by software, hardware, firmware, or any combination thereof. For illustrative purposes, the following description of the method  1000  may refer to elements mentioned above in connection with  FIG. 1 . In certain embodiments, some or all steps of this process, and/or substantially equivalent steps, are performed by execution of processor-readable instructions stored or included on a non-transitory processor-readable medium. For instance, in the description of  FIG. 10  that follows, the quality gate and publisher module  170 , the repository  124  and/or the data store  180  will be described as performing various acts, tasks or steps, but it should be appreciated that this refers to processing system(s), memory and/or storage system(s) of these entities executing instructions to perform those various acts, tasks or steps. Depending on the implementation, some of the processing system(s) can be centrally located, or distributed among a number of server systems that work together. Furthermore, in the description of  FIG. 10 , a particular example is described in which quality gate and publisher module  170  performs certain actions by interacting with other elements of the system  100 . 
     The method  1000  can begin at any time, and in one embodiment, starts at  1010  as company data for company profiles stored in the repository  124  is being continuously updated. At  1020 , the quality gate module  172  determines whether an amount of time since the last publication is greater than or equal to a particular time threshold. In this embodiment, the quality gate module  172  will evaluate a particular version of the repository  124  for potential publication after a certain amount of time elapses. It should be appreciated however, that other events or conditions can trigger the quality gate module  172  to evaluate a particular version of the repository  124  for potential publication to the data store  180 . When the quality gate module  172  determines (at  1020 ) that the time since last publication is less than the time threshold, the method  1000  loops back to  1010  where the company seed collection, enrichment and clustering system  100  continues to update company profiles stored in the repository  124 . By contrast, when the quality gate module  172  determines that  1020  that time since last publication is greater than or equal to the time threshold, the method  1000  proceeds to  1030  where the quality gate module  172  computes a quality score for that particular version of the repository. This quality score is also referred to herein as a repository quality score. The repository quality score can be computed in different ways depending on the implementation. One non-limiting example of how the repository quality scores computed will be described below with reference to  FIG. 11 . 
     The method  1000  then proceeds to step  1040  where the quality gate module  172  determines whether the repository quality score is greater than or equal to a quality threshold. When the quality gate module  172  determines (at  1040 ) that the repository quality score is less than the quality threshold this means that the current version of the repository  124  has failed the quality test, and the method  1000  loops back to  1010  where the company seed collection, enrichment and clustering system  100  continues to update company profiles stored in the repository  124 . By contrast when the quality gate module  172  determines (at  1040 ) that the repository quality score is greater than or equal to the quality threshold this means that the current version of the repository  124  has passed the quality test, and the method  1000  proceeds to  1050  where the publisher module  174  publishes the current version of the repository  124  to the data store  180 . That version of the repository  124  is available at the data store  180  and company data from the various company profiles of the repository  124  can then be utilized by applications. 
       FIG. 11  is a block diagram of a quality scoring generator  1100  that can be executed at the quality gate module  172  to compute a quality score for a particular version of a repository  124  in accordance with the disclosed embodiments. As illustrated in  FIG. 11 , the quality gate module  172  includes a repository quality scoring function  1140  that processes various input metrics to generate a repository quality score  1150  for a particular version of the repository  124 . The repository quality score  1150  can then be used to decide whether that particular version of the repository  124  should be published to the data store  180 . 
     The inputs that are input into the repository quality scoring function  1140  can vary depending on the specific implementation. In this non-limiting example, the inputs include a name match percentage  1102 , attribute coverage percentage  1104 , attribute duplication percentage  1106 , user feedback  1108  regarding formatting score(s), and geo-statistics  1110 . However, it should be appreciated that any number of other signals  1112  could also be input into the repository quality scoring function  1140 . In one non-limiting embodiment, a weight is applied to each input to scale the relative importance of that particular input with respect to each of the other inputs. So, in this particular example a weight  1122  can be applied to the name match percentage  1102 , a weight  1124  can be applied to the attribute coverage percentage  1104 , a weight  1126  can be applied to the attribute duplication percentage  1106 , a weight  1128  can be applied to the user feedback  1108 , a weight  1130  can be applied to the geo-statistics  1110 , etc. In one embodiment, the value of each input can be multiplied by its corresponding weight to generate a product, and then all of the products can be summed to generate a repository quality score  1150  for that particular version of the repository  124 . After repository quality score  1150  has been generated it can then be used to make a decision regarding whether to publish that particular version of the repository  124  to the data store  180 , or to decide that the particular version of the repository  124  needs further development or enrichment before it is published to the data store  180 . 
     The technologies describe above can be used to generate a repository of company profiles that can be accessed by other systems, applications and services. In one implementation, these technologies and the resulting repository that are described above can be used in conjunction with a cloud computing platform, such as a multitenant database system, that provides applications and services to multiple tenants or organizations so that all of those tenants can have access to the company profiles and leverage the repository for use with applications that are part of the cloud computing platform. One example of such a system will now be described below with reference to  FIGS. 12-14 . 
       FIG. 12  is a schematic block diagram of an example of a multi-tenant computing environment in which features of the disclosed embodiments can be implemented in accordance with the disclosed embodiments. As shown in  FIG. 12 , an exemplary cloud-based solution may be implemented in the context of a multi-tenant system  1200  including a server  1202  that supports applications  1228  based upon data  1232  from a database  1230  that may be shared between multiple tenants, organizations, or enterprises, referred to herein as a multi-tenant database. The multi-tenant system  1200  can be shared by many different organizations, and handles the storage of, and access to, different metadata, objects, data and applications across disparate organizations. In one embodiment, the multi-tenant system  1200  can be part of a database system, such as a multi-tenant database system. 
     The multi-tenant system  1200  can provide applications and services and store data for any number of organizations. Each organization is a source of metadata and data associated with that metadata that collectively make up an application. In one implementation, the metadata can include customized content of the organization (e.g., customizations done to an instance that define business logic and processes for an organization). Some non-limiting examples of metadata can include, for example, customized content that describes a build and functionality of objects (or tables), tabs, fields (or columns), permissions, classes, pages (e.g., Apex pages), triggers, controllers, sites, communities, workflow rules, automation rules and processes, etc. Data is associated with metadata to create an application. Data can be stored as one or more objects, where each object holds particular records for an organization. As such, data can include records (or user content) that are held by one or more objects. 
     The multi-tenant system  1200  allows users of user systems  1240  to establish a communicative connection to the multi-tenant system  1200  over a network  1245  such as the Internet or any type of network described herein. Based on a user&#39;s interaction with a user system  1240 , the application platform  1210  accesses an organization&#39;s data (e.g., records held by an object) and metadata that is stored at one or more database systems  1230 , and provides the user system  1240  with access to applications based on that data and metadata. These applications are executed or run in a process space of the application platform  1210  will be described in greater detail below. The user system  1240  and various other user systems (not illustrated) can interact with the applications provided by the multi-tenant system  1200 . The multi-tenant system  1200  is configured to handle requests for any user associated with any organization that is a tenant of the system. Data and services generated by the various applications  1228  are provided via a network  1245  to any number of user systems  1240 , such as desktops, laptops, tablets, smartphones or other client devices, Google Glass™, and any other computing device implemented in an automobile, aircraft, television, or other business or consumer electronic device or system, including web clients. 
     Each application  1228  is suitably generated at run-time (or on-demand) using a common application platform  1210  that securely provides access to the data  1232  in the database  1230  for each of the various tenant organizations subscribing to the system  1200 . The application platform  1210  has access to one or more database systems  1230  that store information (e.g., data and metadata) for a number of different organizations including user information, organization information, custom information, etc. The database systems  1230  can include a multi-tenant database system  1230  as described with reference to  FIG. 12 , as well as other databases or sources of information that are external to the multi-tenant database system  1230  of  FIG. 12 . In accordance with one non-limiting example, the service cloud  1200  is implemented in the form of an on-demand multi-tenant customer relationship management (CRM) system that can support any number of authenticated users for a plurality of tenants. 
     As used herein, a “tenant” or an “organization” should be understood as referring to a group of one or more users (typically employees) that share access to common subset of the data within the multi-tenant database  1230 . In this regard, each tenant includes one or more users and/or groups associated with, authorized by, or otherwise belonging to that respective tenant. Stated another way, each respective user within the multi-tenant system  1200  is associated with, assigned to, or otherwise belongs to a particular one of the plurality of enterprises supported by the system  1200 . 
     Each enterprise tenant may represent a company, corporate department, business or legal organization, and/or any other entities that maintain data for particular sets of users (such as their respective employees or customers) within the multi-tenant system  1200 . Although multiple tenants may share access to the server  1202  and the database  1230 , the particular data and services provided from the server  1202  to each tenant can be securely isolated from those provided to other tenants. The multi-tenant architecture therefore allows different sets of users to share functionality and hardware resources without necessarily sharing any of the data  1232  belonging to or otherwise associated with other organizations. 
     The multi-tenant database  1230  may be a repository or other data storage system capable of storing and managing the data  1232  associated with any number of tenant organizations. The database  1230  may be implemented using conventional database server hardware. In various embodiments, the database  1230  shares processing hardware  1204  with the server  1202 . In other embodiments, the database  1230  is implemented using separate physical and/or virtual database server hardware that communicates with the server  1202  to perform the various functions described herein. 
     In an exemplary embodiment, the database  1230  includes a database management system or other equivalent software capable of determining an optimal query plan for retrieving and providing a particular subset of the data  1232  to an instance of application (or virtual application)  1228  in response to a query initiated or otherwise provided by an application  1228 , as described in greater detail below. The multi-tenant database  1230  may alternatively be referred to herein as an on-demand database, in that the database  1230  provides (or is available to provide) data at run-time to on-demand virtual applications  1228  generated by the application platform  1210 , as described in greater detail below. 
     In practice, the data  1232  may be organized and formatted in any manner to support the application platform  1210 . In various embodiments, the data  1232  is suitably organized into a relatively small number of large data tables to maintain a semi-amorphous “heap”-type format. The data  1232  can then be organized as needed for a particular virtual application  1228 . In various embodiments, conventional data relationships are established using any number of pivot tables  1234  that establish indexing, uniqueness, relationships between entities, and/or other aspects of conventional database organization as desired. Further data manipulation and report formatting is generally performed at run-time using a variety of metadata constructs. Metadata within a universal data directory (UDD)  1236 , for example, can be used to describe any number of forms, reports, workflows, user access privileges, business logic and other constructs that are common to multiple tenants. 
     Tenant-specific formatting, functions and other constructs may be maintained as tenant-specific metadata  1238  for each tenant, as desired. Rather than forcing the data  1232  into an inflexible global structure that is common to all tenants and applications, the database  1230  is organized to be relatively amorphous, with the pivot tables  1234  and the metadata  1238  providing additional structure on an as-needed basis. To that end, the application platform  1210  suitably uses the pivot tables  1234  and/or the metadata  1238  to generate “virtual” components of the virtual applications  1228  to logically obtain, process, and present the relatively amorphous data  1232  from the database  1230 . 
     The server  1202  may be implemented using one or more actual and/or virtual computing systems that collectively provide the dynamic application platform  1210  for generating the virtual applications  1228 . For example, the server  1202  may be implemented using a cluster of actual and/or virtual servers operating in conjunction with each other, typically in association with conventional network communications, cluster management, load balancing and other features as appropriate. The server  1202  operates with any sort of conventional processing hardware  1204 , such as a processor  1205 , memory  1206 , input/output features  1207  and the like. The input/output features  1207  generally represent the interface(s) to networks (e.g., to the network  1245 , or any other local area, wide area or other network), mass storage, display devices, data entry devices and/or the like. 
     The processor  1205  may be implemented using any suitable processing system, such as one or more processors, controllers, microprocessors, microcontrollers, processing cores and/or other computing resources spread across any number of distributed or integrated systems, including any number of “cloud-based” or other virtual systems. The memory  1206  represents any non-transitory short-term or long-term storage or other computer-readable media capable of storing programming instructions for execution on the processor  1205 , including any sort of random-access memory (RAM), read only memory (ROM), flash memory, magnetic or optical mass storage, and/or the like. The computer-executable programming instructions, when read and executed by the server  1202  and/or processor  1205 , cause the server  1202  and/or processor  1205  to create, generate, or otherwise facilitate the application platform  1210  and/or virtual applications  1228  and perform one or more additional tasks, operations, functions, and/or processes described herein. It should be noted that the memory  1206  represents one suitable implementation of such computer-readable media, and alternatively or additionally, the server  1202  could receive and cooperate with external computer-readable media that is realized as a portable or mobile component or platform, e.g., a portable hard drive, a USB flash drive, an optical disc, or the like. 
     The server  1202 , application platform  1210  and database systems  1230  can be part of one backend system. Although not illustrated, the multi-tenant system  1200  can include other backend systems that can include one or more servers that work in conjunction with one or more databases and/or data processing components, and the application platform  1210  can access the other backend systems. 
     The multi-tenant system  1200  includes one or more user systems  1240  that can access various applications provided by the application platform  1210 . The application platform  1210  is a cloud-based user interface. The application platform  1210  can be any sort of software application or other data processing engine that generates the virtual applications  1228  that provide data and/or services to the user systems  1240 . In a typical embodiment, the application platform  1210  gains access to processing resources, communications interfaces and other features of the processing hardware  1204  using any sort of conventional or proprietary operating system  1208 . The virtual applications  1228  are typically generated at run-time in response to input received from the user systems  1240 . For the illustrated embodiment, the application platform  1210  includes a bulk data processing engine  1212 , a query generator  1214 , a search engine  1216  that provides text indexing and other search functionality, and a runtime application generator  1220 . Each of these features may be implemented as a separate process or other module, and many equivalent embodiments could include different and/or additional features, components or other modules as desired. 
     The runtime application generator  1220  dynamically builds and executes the virtual applications  1228  in response to specific requests received from the user systems  1240 . The virtual applications  1228  are typically constructed in accordance with the tenant-specific metadata  1238 , which describes the particular tables, reports, interfaces and/or other features of the particular application  1228 . In various embodiments, each virtual application  1228  generates dynamic web content that can be served to a browser or other client program  1242  associated with its user system  1240 , as appropriate. 
     The runtime application generator  1220  suitably interacts with the query generator  1214  to efficiently obtain multi-tenant data  1232  from the database  1230  as needed in response to input queries initiated or otherwise provided by users of the user systems  1240 . In a typical embodiment, the query generator  1214  considers the identity of the user requesting a particular function (along with the user&#39;s associated tenant), and then builds and executes queries to the database  1230  using system-wide metadata  1236 , tenant specific metadata  1238 , pivot tables  1234 , and/or any other available resources. The query generator  1214  in this example therefore maintains security of the common database  1230  by ensuring that queries are consistent with access privileges granted to the user and/or tenant that initiated the request. 
     With continued reference to  FIG. 12 , the data processing engine  1212  performs bulk processing operations on the data  1232  such as uploads or downloads, updates, online transaction processing, and/or the like. In many embodiments, less urgent bulk processing of the data  1232  can be scheduled to occur as processing resources become available, thereby giving priority to more urgent data processing by the query generator  1214 , the search engine  1216 , the virtual applications  1228 , etc. 
     In exemplary embodiments, the application platform  1210  is utilized to create and/or generate data-driven virtual applications  1228  for the tenants that they support. Such virtual applications  1228  may make use of interface features such as custom (or tenant-specific) screens  1224 , standard (or universal) screens  1222  or the like. Any number of custom and/or standard objects  1226  may also be available for integration into tenant-developed virtual applications  1228 . As used herein, “custom” should be understood as meaning that a respective object or application is tenant-specific (e.g., only available to users associated with a particular tenant in the multi-tenant system) or user-specific (e.g., only available to a particular subset of users within the multi-tenant system), whereas “standard” or “universal” applications or objects are available across multiple tenants in the multi-tenant system. 
     The data  1232  associated with each virtual application  1228  is provided to the database  1230 , as appropriate, and stored until it is requested or is otherwise needed, along with the metadata  1238  that describes the particular features (e.g., reports, tables, functions, objects, fields, formulas, code, etc.) of that particular virtual application  1228 . For example, a virtual application  1228  may include a number of objects  1226  accessible to a tenant, wherein for each object  1226  accessible to the tenant, information pertaining to its object type along with values for various fields associated with that respective object type are maintained as metadata  1238  in the database  1230 . In this regard, the object type defines the structure (e.g., the formatting, functions and other constructs) of each respective object  1226  and the various fields associated therewith. 
     Still referring to  FIG. 12 , the data and services provided by the server  1202  can be retrieved using any sort of personal computer, mobile telephone, tablet or other network-enabled user system  1240  on the network  1245 . In an exemplary embodiment, the user system  1240  includes a display device, such as a monitor, screen, or another conventional electronic display capable of graphically presenting data and/or information retrieved from the multi-tenant database  1230 , as described in greater detail below. 
     Typically, the user operates a conventional browser application or other client program  1242  executed by the user system  1240  to contact the server  1202  via the network  1245  using a networking protocol, such as the hypertext transport protocol (HTTP) or the like. The user typically authenticates his or her identity to the server  1202  to obtain a session identifier (“SessionID”) that identifies the user in subsequent communications with the server  1202 . When the identified user requests access to a virtual application  1228 , the runtime application generator  1220  suitably creates the application at run time based upon the metadata  1238 , as appropriate. However, if a user chooses to manually upload an updated file (through either the web-based user interface or through an API), it will also be shared automatically with all of the users/devices that are designated for sharing. 
     As noted above, the virtual application  1228  may contain Java, ActiveX, or other content that can be presented using conventional client software running on the user system  1240 ; other embodiments may simply provide dynamic web or other content that can be presented and viewed by the user, as desired. As described in greater detail below, the query generator  1214  suitably obtains the requested subsets of data  1232  from the database  1230  as needed to populate the tables, reports or other features of the particular virtual application  1228 . 
     Objects and Records 
     In one embodiment, the multi-tenant database system  1230  can store data in the form of records and customizations. As used herein, the term “record” can refer to a particular occurrence or instance of a data object that is created by a user or administrator of a database service and stored in a database system, for example, about a particular (actual or potential) business relationship or project. The data object can have a data structure defined by the database service (a standard object) or defined by a subscriber (custom object). 
     An object can refer to a structure used to store data and associated metadata along with a globally unique identifier (called an identity field) that allows for retrieval of the object. In one embodiment implementing a multi-tenant database, all of the records for the tenants have an identifier stored in a common table. Each object comprises a number of fields. A record has data fields that are defined by the structure of the object (e.g. fields of certain data types and purposes). An object is analogous to a database table, fields of an object are analogous to columns of the database table, and a record is analogous to a row in a database table. Data is stored as records of the object, which correspond to rows in a database. The terms “object” and “entity” are used interchangeably herein. Objects not only provide structure for storing data, but can also power the interface elements that allow users to interact with the data, such as tabs, the layout of fields on a page, and lists of related records. Objects can also have built-in support for features such as access management, validation, formulas, triggers, labels, notes and attachments, a track field history feature, security features, etc. Attributes of an object are described with metadata, making it easy to create and modify records either through a visual interface or programmatically. 
     A record can also have custom fields defined by a user. A field can be another record or include links thereto, thereby providing a parent-child relationship between the records. Customizations can include custom objects and fields, Apex Code, Visualforce, Workflow, etc. 
     Examples of objects include standard objects, custom objects, and external objects. A standard object can have a pre-defined data structure that is defined or specified by a database service or cloud computing platform. A standard object can be thought of as a default object. For example, in one embodiment, a standard object includes one or more pre-defined fields that are common for each organization that utilizes the cloud computing platform or database system or service. 
     A few non-limiting examples of different types of standard objects can include sales objects (e.g., accounts, contacts, opportunities, leads, campaigns, and other related objects); task and event objects (e.g., tasks and events and their related objects); support objects (e.g., cases and solutions and their related objects); salesforce knowledge objects (e.g., view and vote statistics, article versions, and other related objects); document, note, attachment objects and their related objects; user, sharing, and permission objects (e.g., users, profiles, and roles); profile and permission objects (e.g., users, profiles, permission sets, and related permission objects); record type objects (e.g., record types and business processes and their related objects); product and schedule objects (e.g., opportunities, products, and schedules); sharing and team selling objects (e.g., account teams, opportunity teams, and sharing objects); customizable forecasting objects (e.g., includes forecasts and related objects); forecasts objects (e.g., includes objects for collaborative forecasts); territory management (e.g., territories and related objects associated with territory management); process objects (e.g., approval processes and related objects); content objects (e.g., content and libraries and their related objects); chatter feed objects (e.g., objects related to feeds); badge and reward objects; feedback and performance cycle objects, etc. For example, a record can be for a business partner or potential business partner (e.g. a client, vendor, distributor, etc.) of the user, and can include an entire company, subsidiaries, or contacts at the company. As another example, a record can be a project that the user is working on, such as an opportunity (e.g. a possible sale) with an existing partner, or a project that the user is working on. 
     By contrast, a custom object can have a data structure that is defined, at least in part, by an organization or by a user/subscriber/admin of an organization. For example, a custom object can be an object that is custom defined by a user/subscriber/administrator of an organization, and includes one or more custom fields defined by the user or the particular organization for that custom object. Custom objects are custom database tables that allow an organization to store information unique to their organization. Custom objects can extend the functionality that standard objects provide. 
     In one embodiment, an object can be a relationship management entity having a record type defined within platform that includes a customer relationship management (CRM) database system for managing a company&#39;s relationships and interactions with their customers and potential customers. Examples of CRM entities can include, but are not limited to, an account, a case, an opportunity, a lead, a project, a contact, an order, a pricebook, a product, a solution, a report, a forecast, a user, etc. For instance, an opportunity can correspond to a sales prospect, marketing project, or other business-related activity with respect to which a user desires to collaborate with others. 
     An account object may include information about an organization or person (such as customers, competitors, and partners) involved with a particular business. Each object may be associated with fields. For example, an account object may include fields such as “company”, “zip”, “phone number”, “email address”, etc. A contact object may include contact information, where each contact may be an individual associated with an “account”. A contact object may include fields such as “first name”, “last name”, “phone number”, “accountID”, etc. The “accountID” field of the “contact” object may be the ID of the account that is the parent of the contact. An opportunities object includes information about a sale or a pending deal. An opportunities object may include fields such as “amount”, “accountID”, etc. The “accountID” field of the “opportunity” object may be the ID of the account that is associated with the opportunity. Each field may be associated with a field value. For example, a field value for the “zip” field may be “94105”. 
     External objects are objects that an organization creates that map to data stored outside the organization. External objects are like custom objects, but external object record data is stored outside the organization. For example, data that&#39;s stored on premises in an enterprise resource planning (ERP) system can be accessed as external objects in real time via web service callouts, instead of copying the data into the organization. 
     The following description is of one example of a system in which the features described above may be implemented. The components of the system described below are merely one example and should not be construed as limiting. The features described above may be implemented in any other type of computing environment, such as one with multiple servers, one with a single server, a multi-tenant server environment, a single-tenant server environment, or some combination of the above. 
       FIG. 13  shows a block diagram of an example of an environment  1310  in which an on-demand database service can be used in accordance with some implementations. The environment  1310  includes user systems  1312 , a network  1314 , a database system  1316  (also referred to herein as a “cloud-based system”), a processor system  1317 , an application platform  1318 , a network interface  1320 , tenant database  1322  for storing tenant data  1323 , system database  1324  for storing system data  1325 , program code  1326  for implementing various functions of the system  1316 , and process space  1328  for executing database system processes and tenant-specific processes, such as running applications as part of an application hosting service. In some other implementations, environment  1310  may not have all of these components or systems, or may have other components or systems instead of, or in addition to, those listed above. 
     In some implementations, the environment  1310  is an environment in which an on-demand database service exists. An on-demand database service, such as that which can be implemented using the system  1316 , is a service that is made available to users outside of the enterprise(s) that own, maintain or provide access to the system  1316 . As described above, such users generally do not need to be concerned with building or maintaining the system  1316 . Instead, resources provided by the system  1316  may be available for such users&#39; use when the users need services provided by the system  1316 ; that is, on the demand of the users. Some on-demand database services can store information from one or more tenants into tables of a common database image to form a multi-tenant database system (MTS). The term “multi-tenant database system” can refer to those systems in which various elements of hardware and software of a database system may be shared by one or more customers or tenants. For example, a given application server may simultaneously process requests for a great number of customers, and a given database table may store rows of data such as feed items for a potentially much greater number of customers. A database image can include one or more database objects. A relational database management system (RDBMS) or the equivalent can execute storage and retrieval of information against the database object(s). 
     Application platform  1318  can be a framework that allows the applications of system  1316  to execute, such as the hardware or software infrastructure of the system  1316 . In some implementations, the application platform  1318  enables the creation, management and execution of one or more applications developed by the provider of the on-demand database service, users accessing the on-demand database service via user systems  1312 , or third-party application developers accessing the on-demand database service via user systems  1312 . 
     In some implementations, the system  1316  implements a web-based customer relationship management (CRM) system. For example, in some such implementations, the system  1316  includes application servers configured to implement and execute CRM software applications as well as provide related data, code, forms, renderable webpages and documents and other information to and from user systems  1312  and to store to, and retrieve from, a database system related data, objects, and Webpage content. In some MTS implementations, data for multiple tenants may be stored in the same physical database object in tenant database  1322 . In some such implementations, tenant data is arranged in the storage medium(s) of tenant database  1322  so that data of one tenant is kept logically separate from that of other tenants so that one tenant does not have access to another tenant&#39;s data, unless such data is expressly shared. The system  1316  also implements applications other than, or in addition to, a CRM application. For example, the system  1316  can provide tenant access to multiple hosted (standard and custom) applications, including a CRM application. User (or third-party developer) applications, which may or may not include CRM, may be supported by the application platform  1318 . The application platform  1318  manages the creation and storage of the applications into one or more database objects and the execution of the applications in one or more virtual machines in the process space of the system  1316 . 
     According to some implementations, each system  1316  is configured to provide webpages, forms, applications, data and media content to user (client) systems  1312  to support the access by user systems  1312  as tenants of system  1316 . As such, system  1316  provides security mechanisms to keep each tenant&#39;s data separate unless the data is shared. If more than one MTS is used, they may be located in close proximity to one another (for example, in a server farm located in a single building or campus), or they may be distributed at locations remote from one another (for example, one or more servers located in city A and one or more servers located in city B). As used herein, each MTS could include one or more logically or physically connected servers distributed locally or across one or more geographic locations. Additionally, the term “server” is meant to refer to a computing device or system, including processing hardware and process space(s), an associated storage medium such as a memory device or database, and, in some instances, a database application (for example, OODBMS or RDBMS) as is well known in the art. It should also be understood that “server system” and “server” are often used interchangeably herein. Similarly, the database objects described herein can be implemented as part of a single database, a distributed database, a collection of distributed databases, a database with redundant online or offline backups or other redundancies, etc., and can include a distributed database or storage network and associated processing intelligence. 
     The network  1314  can be or include any network or combination of networks of systems or devices that communicate with one another. For example, the network  1314  can be or include any one or any combination of a LAN (local area network), WAN (wide area network), telephone network, wireless network, cellular network, point-to-point network, star network, token ring network, hub network, or other appropriate configuration. The network  1314  can include a TCP/IP (Transfer Control Protocol and Internet Protocol) network, such as the global internetwork of networks often referred to as the “Internet” (with a capital “I”). The Internet will be used in many of the examples herein. However, it should be understood that the networks that the disclosed implementations can use are not so limited, although TCP/IP is a frequently implemented protocol. 
     The user systems  1312  can communicate with system  1316  using TCP/IP and, at a higher network level, other common Internet protocols to communicate, such as HTTP, FTP, AFS, WAP, etc. In an example where HTTP is used, each user system  1312  can include an HTTP client commonly referred to as a “web browser” or simply a “browser” for sending and receiving HTTP signals to and from an HTTP server of the system  1316 . Such an HTTP server can be implemented as the sole network interface  1320  between the system  1316  and the network  1314 , but other techniques can be used in addition to or instead of these techniques. In some implementations, the network interface  1320  between the system  1316  and the network  1314  includes load sharing functionality, such as round-robin HTTP request distributors to balance loads and distribute incoming HTTP requests evenly over a number of servers. In MTS implementations, each of the servers can have access to the MTS data; however, other alternative configurations may be used instead. 
     The user systems  1312  can be implemented as any computing device(s) or other data processing apparatus or systems usable by users to access the database system  1316 . For example, any of user systems  1312  can be a desktop computer, a work station, a laptop computer, a tablet computer, a handheld computing device, a mobile cellular phone (for example, a “smartphone”), or any other Wi-Fi-enabled device, wireless access protocol (WAP)-enabled device, or other computing device capable of interfacing directly or indirectly to the Internet or other network. The terms “user system” and “computing device” are used interchangeably herein with one another and with the term “computer.” As described above, each user system  1312  typically executes an HTTP client, for example, a web browsing (or simply “browsing”) program, such as a web browser based on the WebKit platform, Microsoft&#39;s Internet Explorer browser, Netscape&#39;s Navigator browser, Opera&#39;s browser, Mozilla&#39;s Firefox browser, or a WAP-enabled browser in the case of a cellular phone, PDA or other wireless device, or the like, allowing a user (for example, a subscriber of on-demand services provided by the system  1316 ) of the user system  1312  to access, process and view information, pages and applications available to it from the system  1316  over the network  1314 . 
     Each user system  1312  also typically includes one or more user input devices, such as a keyboard, a mouse, a trackball, a touch pad, a touch screen, a pen or stylus or the like, for interacting with a graphical user interface (GUI) provided by the browser on a display (for example, a monitor screen, liquid crystal display (LCD), light-emitting diode (LED) display, among other possibilities) of the user system  1312  in conjunction with pages, forms, applications and other information provided by the system  1316  or other systems or servers. For example, the user interface device can be used to access data and applications hosted by system  1316 , and to perform searches on stored data, and otherwise allow a user to interact with various GUI pages that may be presented to a user. As discussed above, implementations are suitable for use with the Internet, although other networks can be used instead of or in addition to the Internet, such as an intranet, an extranet, a virtual private network (VPN), a non-TCP/IP based network, any LAN or WAN or the like. 
     The users of user systems  1312  may differ in their respective capacities, and the capacity of a particular user system  1312  can be entirely determined by permissions (permission levels) for the current user of such user system. For example, where a salesperson is using a particular user system  1312  to interact with the system  1316 , that user system can have the capacities allotted to the salesperson. However, while an administrator is using that user system  1312  to interact with the system  1316 , that user system can have the capacities allotted to that administrator. Where a hierarchical role model is used, users at one permission level can have access to applications, data, and database information accessible by a lower permission level user, but may not have access to certain applications, database information, and data accessible by a user at a higher permission level. Thus, different users generally will have different capabilities with regard to accessing and modifying application and database information, depending on the users&#39; respective security or permission levels (also referred to as “authorizations”). 
     According to some implementations, each user system  1312  and some or all of its components are operator-configurable using applications, such as a browser, including computer code executed using a central processing unit (CPU) such as an Intel Pentium® processor or the like. Similarly, the system  1316  (and additional instances of an MTS, where more than one is present) and all of its components can be operator-configurable using application(s) including computer code to run using the processor system  1317 , which may be implemented to include a CPU, which may include an Intel Pentium® processor or the like, or multiple CPUs. 
     The system  1316  includes tangible computer-readable media having non-transitory instructions stored thereon/in that are executable by or used to program a server or other computing system (or collection of such servers or computing systems) to perform some of the implementation of processes described herein. For example, computer program code  1326  can implement instructions for operating and configuring the system  1316  to intercommunicate and to process webpages, applications and other data and media content as described herein. In some implementations, the computer code  1326  can be downloadable and stored on a hard disk, but the entire program code, or portions thereof, also can be stored in any other volatile or non-volatile memory medium or device as is well known, such as a ROM or RAM, or provided on any media capable of storing program code, such as any type of rotating media including floppy disks, optical discs, digital versatile disks (DVD), compact disks (CD), microdrives, and magneto-optical disks, and magnetic or optical cards, nanosystems (including molecular memory ICs), or any other type of computer-readable medium or device suitable for storing instructions or data. Additionally, the entire program code, or portions thereof, may be transmitted and downloaded from a software source over a transmission medium, for example, over the Internet, or from another server, as is well known, or transmitted over any other existing network connection as is well known (for example, extranet, VPN, LAN, etc.) using any communication medium and protocols (for example, TCP/IP, HTTP, HTTPS, Ethernet, etc.) as are well known. It will also be appreciated that computer code for the disclosed implementations can be realized in any programming language that can be executed on a server or other computing system such as, for example, C, C++, HTML, any other markup language, Java™, JavaScript, ActiveX, any other scripting language, such as VBScript, and many other programming languages as are well known may be used. (Java™ is a trademark of Sun Microsystems, Inc.). 
       FIG. 14  shows a block diagram of example implementations of elements of  FIG. 13  and example interconnections between these elements according to some implementations. That is,  FIG. 14  also illustrates environment  1310 , but  FIG. 14 , various elements of the system  1316  and various interconnections between such elements are shown with more specificity according to some more specific implementations. Elements from  FIG. 13  that are also shown in  FIG. 14  will use the same reference numbers in  FIG. 14  as were used in  FIG. 13 . Additionally, in  FIG. 14 , the user system  1312  includes a processor system  1412 A, a memory system  1412 B, an input system  1412 C, and an output system  1412 D. The processor system  1412 A can include any suitable combination of one or more processors. The memory system  1412 B can include any suitable combination of one or more memory devices. The input system  1412 C can include any suitable combination of input devices, such as one or more touchscreen interfaces, keyboards, mice, trackballs, scanners, cameras, or interfaces to networks. The output system  1412 D can include any suitable combination of output devices, such as one or more display devices, printers, or interfaces to networks. 
     In  FIG. 14 , the network interface  1320  of  FIG. 13  is implemented as a set of HTTP application servers  1400   1 - 1400   N . Each application server  1400 , also referred to herein as an “app server,” is configured to communicate with tenant database  1322  and the tenant data  1423  therein, as well as system database  1324  and the system data  1425  therein, to serve requests received from the user systems  1412 . The tenant data  1423  can be divided into individual tenant storage spaces  1413 , which can be physically or logically arranged or divided. Within each tenant storage space  1413 , tenant data  1414  and application metadata  1416  can similarly be allocated for each user. For example, a copy of a user&#39;s most recently used (MRU) items can be stored to user storage  1414 . Similarly, a copy of MRU items for an entire organization that is a tenant can be stored to tenant storage space  1413 . 
     The process space  1328  includes system process space  1402 , individual tenant process spaces  1404  and a tenant management process space  1410 . The application platform  1318  includes an application setup mechanism  1438  that supports application developers&#39; creation and management of applications. Such applications and others can be saved as metadata into tenant database  1322  by save routines  1436  for execution by subscribers as one or more tenant process spaces  1404  managed by tenant management process  1410 , for example. 
     Invocations to such applications can be coded using PL/SOQL  1434 , which provides a programming language style interface extension to API  1432 . A detailed description of some PL/SOQL language implementations is discussed in commonly assigned U.S. Pat. No. 7,730,478, titled METHOD AND SYSTEM FOR ALLOWING ACCESS TO DEVELOPED APPLICATIONS VIA A MULTI-TENANT ON-DEMAND DATABASE SERVICE, by Craig Weissman, issued on Jun. 1, 2010, and hereby incorporated by reference in its entirety and for all purposes. Invocations to applications can be detected by one or more system processes, which manage retrieving application metadata  1316  for the subscriber making the invocation and executing the metadata as an application in a virtual machine. 
     The system  1316  of  FIG. 14  also includes a user interface (UI)  1430  and an application programming interface (API)  1432  to system  1316  resident processes to users or developers at user systems  1412 . In some other implementations, the environment  1310  may not have the same elements as those listed above or may have other elements instead of, or in addition to, those listed above. 
     Each application server  1400  can be communicably coupled with tenant database  1322  and system database  1324 , for example, having access to tenant data  1423  and system data  1425 , respectively, via a different network connection. For example, one application server  1400   1  can be coupled via the network  1314  (for example, the Internet), another application server  1400   N  can be coupled via a direct network link, and another application server (not illustrated) can be coupled by yet a different network connection. Transfer Control Protocol and Internet Protocol (TCP/IP) are examples of typical protocols that can be used for communicating between application servers  1400  and the system  1316 . However, it will be apparent to one skilled in the art that other transport protocols can be used to optimize the system  1316  depending on the network interconnections used. 
     In some implementations, each application server  1400  is configured to handle requests for any user associated with any organization that is a tenant of the system  1316 . Because it can be desirable to be able to add and remove application servers  1400  from the server pool at any time and for various reasons, in some implementations there is no server affinity for a user or organization to a specific application server  1400 . In some such implementations, an interface system implementing a load balancing function (for example, an F5 Big-IP load balancer) is communicably coupled between the application servers  1400  and the user systems  1412  to distribute requests to the application servers  1400 . In one implementation, the load balancer uses a least-connections algorithm to route user requests to the application servers  1400 . Other examples of load balancing algorithms, such as round robin and observed-response-time, also can be used. For example, in some instances, three consecutive requests from the same user could hit three different application servers  1400 , and three requests from different users could hit the same application server  1400 . In this manner, by way of example, system  1316  can be a multi-tenant system in which system  1316  handles storage of, and access to, different objects, data and applications across disparate users and organizations. 
     In one example storage use case, one tenant can be a company that employs a sales force where each salesperson uses system  1316  to manage aspects of their sales. A user can maintain contact data, leads data, customer follow-up data, performance data, goals and progress data, etc., all applicable to that user&#39;s personal sales process (for example, in tenant database  1322 ). In an example of an MTS arrangement, because all of the data and the applications to access, view, modify, report, transmit, calculate, etc., can be maintained and accessed by a user system  1412  having little more than network access, the user can manage his or her sales efforts and cycles from any of many different user systems. For example, when a salesperson is visiting a customer and the customer has Internet access in their lobby, the salesperson can obtain critical updates regarding that customer while waiting for the customer to arrive in the lobby. 
     While each user&#39;s data can be stored separately from other users&#39; data regardless of the employers of each user, some data can be organization-wide data shared or accessible by several users or all of the users for a given organization that is a tenant. Thus, there can be some data structures managed by system  1316  that are allocated at the tenant level while other data structures can be managed at the user level. Because an MTS can support multiple tenants including possible competitors, the MTS can have security protocols that keep data, applications, and application use separate. Also, because many tenants may opt for access to an MTS rather than maintain their own system, redundancy, up-time, and backup are additional functions that can be implemented in the MTS. In addition to user-specific data and tenant-specific data, the system  1316  also can maintain system level data usable by multiple tenants or other data. Such system level data can include industry reports, news, postings, and the like that are sharable among tenants. 
     In some implementations, the user systems  1412  (which also can be client systems) communicate with the application servers  1400  to request and update system-level and tenant-level data from the system  1316 . Such requests and updates can involve sending one or more queries to tenant database  1322  or system database  1324 . The system  1316  (for example, an application server  1400  in the system  1316 ) can automatically generate one or more SQL statements (for example, one or more SQL queries) designed to access the desired information. System database  1324  can generate query plans to access the requested data from the database. The term “query plan” generally refers to one or more operations used to access information in a database system. 
     Each database can generally be viewed as a collection of objects, such as a set of logical tables, containing data fitted into predefined or customizable categories. A “table” is one representation of a data object, and may be used herein to simplify the conceptual description of objects and custom objects according to some implementations. It should be understood that “table” and “object” may be used interchangeably herein. Each table generally contains one or more data categories logically arranged as columns or fields in a viewable schema. Each row or element of a table can contain an instance of data for each category defined by the fields. For example, a CRM database can include a table that describes a customer with fields for basic contact information such as name, address, phone number, fax number, etc. Another table can describe a purchase order, including fields for information such as customer, product, sale price, date, etc. In some MTS implementations, standard entity tables can be provided for use by all tenants. For CRM database applications, such standard entities can include tables for case, account, contact, lead, and opportunity data objects, each containing pre-defined fields. As used herein, the term “entity” also may be used interchangeably with “object” and “table.” 
     In some MTS implementations, tenants are allowed to create and store custom objects, or may be allowed to customize standard entities or objects, for example by creating custom fields for standard objects, including custom index fields. Commonly assigned U.S. Pat. No. 7,779,039, titled CUSTOM ENTITIES AND FIELDS IN A MULTI-TENANT DATABASE SYSTEM, by Weissman et al., issued on Aug. 17, 2010, and hereby incorporated by reference in its entirety and for all purposes, teaches systems and methods for creating custom objects as well as customizing standard objects in a multi-tenant database system. In some implementations, for example, all custom entity data rows are stored in a single multi-tenant physical table, which may contain multiple logical tables per organization. It is transparent to customers that their multiple “tables” are in fact stored in one large table or that their data may be stored in the same table as the data of other customers. 
     The preceding description sets forth numerous specific details such as examples of specific systems, components, methods, and so forth, in order to provide a good understanding of several embodiments of the present invention. It will be apparent to one skilled in the art, however, that at least some embodiments of the present invention may be practiced without these specific details. In other instances, well-known components or methods are not described in detail or are presented in simple block diagram format in order to avoid unnecessarily obscuring the present invention. Thus, the specific details set forth are merely exemplary. Particular implementations may vary from these exemplary details and still be contemplated to be within the scope of the present invention. 
     In the above description, numerous details are set forth. It will be apparent, however, to one of ordinary skill in the art having the benefit of this disclosure, that embodiments of the invention may be practiced without these specific details. In some instances, well-known structures and devices are shown in block diagram form, rather than in detail, in order to avoid obscuring the description. 
     Some portions of the detailed description are presented in terms of algorithms and symbolic representations of operations on data bits within a computer memory. These algorithmic descriptions and representations are the means used by those skilled in the data processing arts to most effectively convey the substance of their work to others skilled in the art. An algorithm is here, and generally, conceived to be a self-consistent sequence of steps leading to a desired result. The steps are those requiring physical manipulations of physical quantities. Usually, though not necessarily, these quantities take the form of electrical or magnetic signals capable of being stored, transferred, combined, compared, and otherwise manipulated. It has proven convenient at times, principally for reasons of common usage, to refer to these signals as bits, values, elements, symbols, characters, terms, numbers, or the like. 
     It should be borne in mind, however, that all of these and similar terms are to be associated with the appropriate physical quantities and are merely convenient labels applied to these quantities. Unless specifically stated otherwise as apparent from the above discussion, it is appreciated that throughout the description, discussions utilizing terms such as “determining”, “identifying”, “adding”, “selecting” or the like, refer to the actions and processes of a computer system, or similar electronic computing device, that manipulates and transforms data represented as physical (e.g., electronic) quantities within the computer system&#39;s registers and memories into other data similarly represented as physical quantities within the computer system memories or registers or other such information storage, transmission or display devices. 
     Embodiments of the invention also relate to an apparatus for performing the operations herein. This apparatus may be specially constructed for the required purposes, or it may comprise a general-purpose computer selectively activated or reconfigured by a computer program stored in the computer. Such a computer program may be stored in a computer readable storage medium, such as, but not limited to, any type of disk including floppy disks, optical disks, CD-ROMs, and magnetic-optical disks, read-only memories (ROMs), random access memories (RAMs), EPROMs, EEPROMs, magnetic or optical cards, or any type of media suitable for storing electronic instructions. 
     The algorithms and displays presented herein are not inherently related to any particular computer or other apparatus. Various general-purpose systems may be used with programs in accordance with the teachings herein, or it may prove convenient to construct a more specialized apparatus to perform the required method steps. The required structure for a variety of these systems will appear from the description below. In addition, the present invention is not described with reference to any particular programming language. It will be appreciated that a variety of programming languages may be used to implement the teachings of the invention as described herein. 
     While at least one exemplary embodiment has been presented in the foregoing detailed description, it should be appreciated that a vast number of variations exist. It should also be appreciated that the exemplary embodiment or embodiments described herein are not intended to limit the scope, applicability, or configuration of the claimed subject matter in any way. Rather, the foregoing detailed description will provide those skilled in the art with a convenient road map for implementing the described embodiment or embodiments. It should be understood that various changes can be made in the function and arrangement of elements without departing from the scope defined by the claims, which includes known equivalents and foreseeable equivalents at the time of filing this patent application.