diff --git a/lib/modules/datasource/crate/index.spec.ts b/lib/modules/datasource/crate/index.spec.ts
index c01dd03a0a4953f3952316296d7f0f6518840450..765bba4d61ecdb18bd532d9f5738bd3e8d920e30 100644
--- a/lib/modules/datasource/crate/index.spec.ts
+++ b/lib/modules/datasource/crate/index.spec.ts
@@ -389,4 +389,46 @@ describe('modules/datasource/crate/index', () => {
       ).toReject();
     });
   });
+
+  describe('postprocessRelease', () => {
+    const datasource = new CrateDatasource();
+
+    it('no-op for registries other than crates.io', async () => {
+      const releaseOrig = { version: '4.5.17' };
+
+      const res = await datasource.postprocessRelease(
+        {
+          packageName: 'clap',
+          registryUrl: 'https://example.com',
+        },
+        releaseOrig,
+      );
+
+      expect(res).toBe(releaseOrig);
+    });
+
+    it('fetches releaseTimestamp', async () => {
+      httpMock
+        .scope(API_BASE_URL)
+        .get('/crates/clap/4.5.17')
+        .reply(200, {
+          version: {
+            created_at: '2024-09-04T19:16:41.355243+00:00',
+          },
+        });
+
+      const res = await datasource.postprocessRelease(
+        {
+          packageName: 'clap',
+          registryUrl: 'https://crates.io',
+        },
+        { version: '4.5.17' },
+      );
+
+      expect(res).toEqual({
+        version: '4.5.17',
+        releaseTimestamp: '2024-09-04T19:16:41.355243+00:00',
+      });
+    });
+  });
 });
diff --git a/lib/modules/datasource/crate/index.ts b/lib/modules/datasource/crate/index.ts
index 24ec9ce47e02c897b3db9c388c577ac495fac2e1..29eb0b84985f23c5a7461bf13be5378e6120932e 100644
--- a/lib/modules/datasource/crate/index.ts
+++ b/lib/modules/datasource/crate/index.ts
@@ -11,7 +11,14 @@ import { newlineRegex, regEx } from '../../../util/regex';
 import { joinUrlParts, parseUrl } from '../../../util/url';
 import * as cargoVersioning from '../../versioning/cargo';
 import { Datasource } from '../datasource';
-import type { GetReleasesConfig, Release, ReleaseResult } from '../types';
+import type {
+  GetReleasesConfig,
+  PostprocessReleaseConfig,
+  PostprocessReleaseResult,
+  Release,
+  ReleaseResult,
+} from '../types';
+import { ReleaseTimestampSchema } from './schema';
 import type {
   CrateMetadata,
   CrateRecord,
@@ -371,4 +378,31 @@ export class CrateDatasource extends Datasource {
 
     return [packageName.slice(0, 2), packageName.slice(2, 4), packageName];
   }
+
+  @cache({
+    namespace: `datasource-crate`,
+    key: (
+      { registryUrl, packageName }: PostprocessReleaseConfig,
+      { version }: Release,
+    ) => `postprocessRelease:${registryUrl}:${packageName}:${version}`,
+    ttlMinutes: 7 * 24 * 60,
+    cacheable: ({ registryUrl }: PostprocessReleaseConfig, _: Release) =>
+      registryUrl === 'https://crates.io',
+  })
+  override async postprocessRelease(
+    { packageName, registryUrl }: PostprocessReleaseConfig,
+    release: Release,
+  ): Promise<PostprocessReleaseResult> {
+    if (registryUrl !== 'https://crates.io') {
+      return release;
+    }
+
+    const url = `https://crates.io/api/v1/crates/${packageName}/${release.version}`;
+    const { body: releaseTimestamp } = await this.http.getJson(
+      url,
+      ReleaseTimestampSchema,
+    );
+    release.releaseTimestamp = releaseTimestamp;
+    return release;
+  }
 }
diff --git a/lib/modules/datasource/crate/schema.ts b/lib/modules/datasource/crate/schema.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9d799be31b42cc452cb924a6949e43fa667446ca
--- /dev/null
+++ b/lib/modules/datasource/crate/schema.ts
@@ -0,0 +1,11 @@
+import { z } from 'zod';
+
+export const ReleaseTimestampSchema = z
+  .object({
+    version: z.object({
+      created_at: z.string(),
+    }),
+  })
+  .transform(({ version: { created_at } }) => created_at)
+  .nullable()
+  .catch(null);