# Service Agreement

*Effective Date: January 31, 2024*

This comprehensive service agreement governs the relationship between EraseMe, LLC dba Erase Me ("Service Provider") and you ("Customer").

## Service Provider Information

**EraseMe, LLC dba Erase Me**  
1501 Lincoln Blvd, #1006  
Venice, CA 90291

## 1. Services Provided

The Service Provider agrees to offer online privacy services ("Services") aimed at identifying, requesting removal, and monitoring the Customer's personal information across various internet platforms, databases, and websites, to enhance the Customer's privacy and security online.

These Services include, but are not limited to:

### a. Identification and Assessment

- Comprehensive scanning of public databases, websites, and other online platforms to locate Customer's personal information
- Assessment of potential privacy risks associated with the discovered personal information

### b. Removal Actions

- Submission of removal requests on behalf of the Customer to third-party websites, databases, and search engines demanding the deletion or de-indexing of the Customer's personal information
- Negotiation with non-compliant entities to achieve information removal goals, within legal confines

### c. Continuous Monitoring and Reporting

- Ongoing surveillance for the Customer's personal information appearance or re-appearance online
- Regular reporting to the Customer detailing actions taken, outcomes achieved, and any recommendations for further privacy protection measures

### d. Customer Support and Consultation

- Access to dedicated support for inquiries related to the Services
- Consultation services offering best practices for maintaining online privacy and security

## 2. Payment Terms

### a. Fees

The Customer agrees to pay the Service Provider for the Services rendered under this Agreement. This fee covers all the services listed under Section 1 and is structured as follows:

- **Monthly Service Fee:** $7.99, charged monthly for the duration of the Agreement
- **Annual Service Fee:** $79.99, charged annually for the duration of the Agreement

### b. Payment Schedule and Methods

Payments are due on the first day of each subscription period for the monthly service fee.

### c. Refund and Cancellation Policy

The Customer may cancel this Agreement with a written notice. Monthly service fees may be prorated if the service is canceled mid-cycle, subject to Service Provider's [Refund Policy](/kb/art_efe67618ec28).

## 3. Customer Obligations

### a. Information Provision

The Customer must provide accurate, complete, and timely information as necessary for the Service Provider to perform the Services effectively. This includes, but is not limited to:

- Personal details
- Online account information
- Specific concerns or areas of focus for information removal

### b. Cooperation

The Customer agrees to cooperate fully with the Service Provider and to provide any additional assistance or information promptly to facilitate the Services.

## 4. Performance and Limitations

### a. No Guarantee

The Service Provider will make every reasonable effort to remove or de-index the Customer's personal information from public platforms. However, due to factors beyond the Service Provider's control, including the policies of third-party websites and legal limitations, an absolute guarantee of complete information removal cannot be provided.

### b. Limitation of Liability

The Service Provider shall not be liable for any direct, indirect, incidental, special, or consequential damages resulting from the use of the Services or the inability to achieve complete information removal.

## 5. Confidentiality

The Service Provider agrees to maintain the confidentiality of the Customer's information and not disclose any information provided by the Customer or discovered during the provision of the Services to any third party, except as required by law or with the Customer's explicit consent.

## 6. Term and Termination

### a. Term

This Agreement shall commence on the Effective Date and continue until terminated by either party.

### b. Termination

Either party may terminate this Agreement upon providing a written notice to the other party. Upon termination, the Service Provider shall cease providing the Services, and the Customer shall fulfill any outstanding payment obligations.

## 7. Dispute Resolution

In the event of a dispute arising from or related to this Agreement, the parties agree to:

1. First attempt to resolve the dispute through good faith negotiation
2. If the dispute cannot be resolved through negotiation within a reasonable period, the parties agree to submit the dispute to binding arbitration
3. Arbitration shall be conducted in Wyoming in accordance with the rules of American Arbitration Association
4. The decision of the arbitrator shall be final and binding on the parties

---

*For questions about this Service Agreement, please contact our support team.*