These are the complete manual recovery steps used. They work only while the successful IRS assignment page is still open and holding the letter in memory.
Important: do not reapply for another EIN. This recovers the document from the existing session.
I did not figure this out completely on my own. I used ChatGPT on my Mac and gave it control to diagnose and run everything. After it successfully recovered the file, I had ChatGPT create the step by step instructions for you guys.
## 1. Preserve the IRS page
On the iPhone:
- Keep the successful `einAssignment` tab open.
- Don’t refresh it or clear Safari’s website data.
- If you have multiple working copies of the assignment page, leave one untouched. The inspected tab may ultimately navigate away to display the PDF.
## 2. Enable Web Inspector
On the iPhone:
- Open Settings.
- Select Apps → Safari → Advanced.
- Turn on **Web Inspector**.
- Return to Safari and display the IRS assignment page.
On the Mac:
- Open Safari.
- Select Safari → Settings → Advanced.
- Enable **Show features for web developers**.
Apple/WebKit documents this remote-inspection setup here: [Enabling Web Inspector](https://webkit.org/web-inspector/enabling-web-inspector/).
## 3. Connect the iPhone
- Connect the unlocked iPhone to the Mac with a cable.
- Tap **Trust** if the iPhone asks whether you trust the Mac.
- Keep the IRS tab visible on the iPhone.
- In Mac Safari, open the **Develop** menu.
- Select your iPhone.
- Select the page named something like:
```text
sa.www4.irs.gov — einAssignment
```
A Web Inspector window should open.
If the phone doesn’t appear, reconnect the cable, unlock it, confirm Trust, and toggle Web Inspector off and back on.
## 4. Confirm the Safari error
- In Web Inspector, select **Console**.
- Tap the IRS “Download EIN confirmation Letter [PDF]” button once on the iPhone.
The console should show an error beginning with:
```text
Not allowed to navigate top frame to data URL
'data:application/pdf;base64,...
```
That confirms the real PDF exists, but Safari is blocking the IRS page’s download method.
## 5. Run the recovery command
At the bottom of the Web Inspector Console, click beside the `>` prompt.
Review and then paste this command:
```js
(() => {
const control = [...document.querySelectorAll("a, button")]
.find(element =>
element.textContent?.includes("Download EIN confirmation Letter")
);
if (!control) {
throw new Error("The IRS download control was not found.");
}
const fiberKey = Object.keys(control)
.find(key => key.startsWith("__reactFiber$"));
if (!fiberKey) {
throw new Error("The IRS page's React state was not found.");
}
const skippedKeys = new Set([
"return",
"child",
"sibling",
"alternate",
"stateNode",
"_owner"
]);
function findLetter(root) {
const visited = new WeakSet();
function search(value, depth = 0) {
if (
!value ||
typeof value !== "object" ||
visited.has(value) ||
depth > 10 ||
value === window ||
value instanceof Node
) {
return null;
}
visited.add(value);
if (
value.confirmationLetter &&
typeof value.confirmationLetter.content === "string"
) {
return value.confirmationLetter;
}
for (const [key, child] of Object.entries(value)) {
if (skippedKeys.has(key)) continue;
const result = search(child, depth + 1);
if (result) return result;
}
return null;
}
return search(root);
}
let fiber = control[fiberKey];
let letter = null;
for (let level = 0; fiber && level < 40 && !letter; level++) {
letter =
findLetter(fiber.memoizedProps) ||
findLetter(fiber.memoizedState) ||
findLetter(fiber.dependencies);
fiber = fiber.return;
}
if (!letter?.content) {
throw new Error("The confirmation-letter data is no longer in memory.");
}
const binary = atob(letter.content.replace(/\s/g, ""));
const bytes = new Uint8Array(binary.length);
for (let index = 0; index < binary.length; index++) {
bytes[index] = binary.charCodeAt(index);
}
const signature = new TextDecoder().decode(bytes.slice(0, 5));
if (signature !== "%PDF-") {
throw new Error("The recovered data does not have a valid PDF signature.");
}
const pdf = new Blob([bytes], { type: "application/pdf" });
const localUrl = URL.createObjectURL(pdf);
const link = document.createElement("a");
link.href = localUrl;
link.download = `${letter.letterType || "EIN-confirmation"}.pdf`;
document.body.appendChild(link);
link.click();
setTimeout(() => {
URL.revokeObjectURL(localUrl);
link.remove();
}, 300000);
return {
filename: link.download,
size: pdf.size,
signature
};
})();
```
Press Return.
This command never contacts another website or sends the PDF anywhere. It reads the letter already present in the IRS page, verifies that its decoded bytes begin with the standard `%PDF-` signature, and creates a temporary local `blob:` URL.
## 6. Save the PDF
The iPhone should navigate to a URL beginning with:
```text
blob:https://sa.www4.irs.gov/
```
The CP575 should then appear.
- Tap the PDF to reveal Safari’s controls.
- Tap Share.
- Select **Save to Files**.
- Give it a clear filename.
- Save it to iCloud Drive or another permanent folder.
- Open the saved file from Files and verify it displays **IRS Notice CP575/G** and the EIN-assignment statement.
After confirming the downloaded copy opens correctly, you can close Web Inspector and the old IRS tabs.
If the script reports that the control, React state or confirmation data cannot be found, the active page state has likely been lost. If you are still on the page that says something like season times out, check to see if you can bring the page back that has the download button by hitting the back button in the browser (this worked for me).
This is my first ever post on Reddit. Hopefully someone finds this and it’s able to save them a headache! I tried calling The IRS several times and every time it automatically hung up saying too many people were calling for the same issue. All my research pointed to calling being the only solution for a new LLC. That’s when I asked ChatGPT for help. If you have your favorite AI that can access the needed areas, I highly recommend copying this message and tell it to do it for you. Good luck!