Where can I find Canadian postal code geometries?
A list of all Canadian postal codes (includes city, province, latitude, longitude) is available here:
http://geocoder.ca/?freedata=1
Geocoder collected the postal codes by crowd-sourcing.
Canadian postal codes are not available for free download. You can either purchase the PostCode Conversion File from Statistics Canada or one of many value-added data sets from providers like DMTI Spatial.
The lack of freely available PostCode data for Canada is a huge hindrance to business.
UPDATE: As a heads-up, they changed the projection format between 2011 and 2016 in case you are upgrading your local data from 2011 to 2016. The 2011 shape file is NAD83 (4269), but the 2016 seems to be using Lambert projection (3348). I say seems because when I load the shape file it doesn't specifically seem to say the exact EPSG/SRID. I ended up converting the shape file to be 4326 so that it's the same as Google Maps.
UPDATE: 2016 FSA Census Boundary files are now available (as of Sept 13, 2017 according to their site).
UPDATE: Stats Canada has since released the Forward Sortation Areas Boundary files (as of February 5, 2013 according to their site).
Download Page for all 2011 Census Boundary Files
Download Page for all 2016 Census Boundary Files
Statistics Canada has a page dedicated to making available different Shape files regarding Canadian Boundaries, both Geographical and Digital. (link is the same as the one mentioned above)
http://www12.statcan.gc.ca/census-recensement/2011/geo/bound-limit/bound-limit-2011-eng.cfm
While they make no mention of one specific to every possible Postal Code (nor do I think you're very likely to find one), they do list one for the FSAs but it does not as of yet have a release date.
If you only need the geographic center of the postalcodes however (instead of the boundary), check out the free database at http://geocoder.ca/. You can obtain the approx center of the FSA from this as well by grouping them by the first three digits of the PostalCode and then averaging the Latitude/Longitude. SQL would help do this much easier if you import the data into a database first.
Here's a query do do what I mean.
IF NOT EXISTS(SELECT * FROM zipcodeset WHERE LEN(PostalCode) = 3)
BEGIN
INSERT INTO zipcodeset(PostalCode, Latitude, Longitude)
SELECT LEFT(PostalCode,3), Avg(Latitude), Avg(Longitude)
FROM zipcodeset
GROUP BY LEFT(PostalCode,3)
END
I'm waiting for those FSA Boundary shape files to be released as well so if you see them get published to that site please post a reply here so we can amend the answer. They are now published