Project ID is used as the unique identifier.
CloudHealth uses BigQuery as the billing source which does not have Project Number resulting in a blank Project Number field when we pull data. After the platform derives a project from the billing file, it then tries to collect the Project Number via API (as long as that project is correctly configured) but if that project is not configured correctly or is deleted (for historical projects), CloudHealth will be unable to collect that project number.
In other words, retrieving Project ID is guaranteed while Project Number is not.
As a best practice (which is aligns with GCP), it is suggest using Project ID as the unique identifier. Project ID can not be changed within the GCP console (unlike Project Number) but it does have the ability to be customized so customers can build nomenclatures into the name (eg prod-analytics-2). This provides additional flexibility and can be applicable when creating perspective rules like “where Project ID contains 'analytics'”. Most important to CloudHealth, using Project ID will remove the dependency on the API.